HarmonyOS 滑动事件冲突

我现在遇到一个滑动冲突的问题,父组件监听滑动手势做相应的操作,子组件中有一个scrollView,当父组件滑动到某个位置时,父组件通过position来定位位置,如果scrollView有展示不全的内容,scrollView 则滑动,如果都展示全,scrollView不滑动,我用了HitTestMode.Block HitTestMode.None 来控制scrollView 是否获得焦点,现在没有办法判断scrollView 是否展示全,只要给设置HitTestMode.Block 就能滑动 this.scrollerForScroll.isAtEnd() 这个只能判断scroll是否在结尾,请问还有其他api能监测 scroll是否显示全吗 还有如果子组件设置了HitTestMode.Block 那么他具有焦点,那么他的兄弟组件设置HitTestMode.Transparent,还能获取焦点,怎么能让 兄弟节点和父组件具有相同的焦点

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

可以参考以下demo,父组件 滑动完成后 子组件再滑动,目前用scrollController阻止scroll滚动

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State isBlock:boolean =false
  @State move:number =100
  scrollController: Scroller = new Scroller()
  scrollOffsetY: number = 0
  isScroll: boolean = false
  prevOffsetY: number = 0

  @State prevMoveY: number = this.move;

  aboutToAppear(): void {
    console.info("打印进入页面")
    let value2String = 'ddd'
    console.info("打印进入页面", value2String)

    // test2()
  }
  build() {
    Stack({alignContent:Alignment.Top}){
      Column() {
        Text(this.message).height(30)
        Scroll(this.scrollController) {
          Column() {
            Text("Scroll").height(400).backgroundColor(Color.Red)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
            Text("Scroll").height(400)
          }

        }
        // .enableScrollInteraction(this.isBlock)
        // .onScroll((xOffset:number,yOffset:number)=>{
        // console.info("打印onScroll")
        // })
        .onScrollStart(()=>{
          if(!this.isScroll){
            this.scrollController.scrollTo({ xOffset: 0, yOffset: this.scrollOffsetY })
          }
        })
        .onDidScroll((event, y)=>{
          console.info(JSON.stringify(y), 'event')
          if(!this.isScroll){
            this.scrollController.scrollTo({ xOffset: 0, yOffset: this.scrollOffsetY })
          }
        })
        .width("100%")
        .height(600)
        .onTouch((event:TouchEvent)=>{
          console.info("打印onTouch")
          console.info("打印isBlock"+this.isBlock)
        })
        .nestedScroll({ scrollForward: NestedScrollMode.PARENT_FIRST, scrollBackward: NestedScrollMode.PARENT_FIRST })
      }
      .parallelGesture(
        PanGesture({ distance: 1 })
          .onActionStart((event: GestureEvent) => {
            // 初始化移动,这边移动的时候,可能滚动了一些内容,不知道是否需要,目前是这种情况,不知道是否需要对应处理,目前没有
            this.move = Math.max(-40, Math.min(event.offsetY+this.prevMoveY, 100))
            this.prevOffsetY = event.offsetY
            console.info("start", this.move, this.prevMoveY)
            this.isScroll = this.prevMoveY === this.move
            if(this.isScroll){
              // 记录滚动距离
              this.scrollOffsetY = this.scrollController.currentOffset().yOffset
            }
          })
          .onActionUpdate((event: GestureEvent) => {
            let oldMove = this.move
            // 这边可能会出现一种情况,可能移动超出了区间,之后下滑的时候,event.offsetY+this.prevMoveY还是会小于-40,此时会滚动scroll,不知道是否合适,如果不是这样的效果的话,可以在记录上次的移动距离,每次求差值
            this.move = Math.max(-40, Math.min(event.offsetY+this.prevMoveY, 100))
            // 这边就是说的相对移动距离
            // this.move = Math.max(-40, Math.min(event.offsetY - this.prevOffsetY + this.move, 100))
            // this.prevOffsetY = event.offsetY
            this.isScroll = oldMove === this.move
            if(this.isScroll){
              this.scrollOffsetY = this.scrollController.currentOffset().yOffset
            }

          }).onActionEnd(() => {
          console.info(this.move.toString(), 'this.move')
          this.prevMoveY = this.move
          this.scrollOffsetY = this.scrollController.currentOffset().yOffset
        })
      )
    }.position({top:this.move})
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
滑动嵌套事件冲突处理
289浏览 • 0回复 待解决
HarmonyOS 滑动冲突问题
536浏览 • 1回复 待解决
HarmonyOS 父子组件滑动冲突
25浏览 • 1回复 待解决
HarmonyOS List+Swipe+web滑动冲突
224浏览 • 1回复 待解决
HarmonyOS Refresh组件嵌套滑动冲突问题
1026浏览 • 1回复 待解决
HarmonyOS Tabs和横向Scroll滑动冲突
34浏览 • 1回复 待解决
Scroll内Flex加宽高与滑动冲突
2099浏览 • 1回复 待解决
事件分发冲突问题,如何解决?
450浏览 • 1回复 待解决
HarmonyOS onToch事件滑动问题
31浏览 • 1回复 待解决
HarmonyOS如何拦截list的滑动事件
412浏览 • 1回复 待解决
如何屏蔽List的滑动事件
2435浏览 • 1回复 待解决