HarmonyOS 双向滑动Slider组件?

开发中需要实现双向滑动Slider组件,是否有现成的实现方案

阅读 625
1 个回答

请参考以下规避方案:

@Entry
@Component
struct SliderPage {
  @State message: string = 'Hello World';


  private blockSize: number = 16;
  @State offsetX1: number = 0
  @State offsetX2: number = 0
  @State positionX1: number = 0
  @State positionX2: number = 300
  @State positionY: number = 0
  build() {
    Column() {
      Stack(){
        Row(){}.justifyContent(FlexAlign.Start).width(300).height(15).backgroundColor(Color.Grey)
        Stack(){}.width(this.blockSize).height(this.blockSize).backgroundColor(Color.Red).position({x:this.positionX1,y:this.positionY})
        .gesture(
          PanGesture()
            .onActionStart((event: GestureEvent) => {
              console.info('Pan start')
            })
            .onActionUpdate((event: GestureEvent) => {
              if (event) {
                if(this.offsetX1 + event.offsetX > this.positionX2 || this.offsetX1 + event.offsetX <= 0) {
                  return;
                } else {
                  this.positionX1 = this.offsetX1 + event.offsetX
                }
              }
            })
            .onActionEnd(() => {
              this.offsetX1 = this.positionX1
              console.info('Pan end')
            })
        )
        Stack().width(this.blockSize).height(this.blockSize).backgroundColor(Color.Blue).position({x:this.positionX2,y:this.positionY})
          .gesture(
            PanGesture()
              .onActionStart((event: GestureEvent) => {
                console.info('Pan start')
              })
              .onActionUpdate((event: GestureEvent) => {
                if (event) {
                  if(this.offsetX2 + event.offsetX < this.positionX1 || this.offsetX2 + event.offsetX >= 300) {
                    return;
                  } else {
                    this.positionX2 = this.offsetX2 + event.offsetX
                  }
                }
              })
              .onActionEnd(() => {
                this.offsetX2 = this.positionX2
                console.info('Pan end')
              })
          )
      }


    }
    .height('100%')
    .width('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进