HarmonyOS鸿蒙Next中如何同时监听2次点击和n次点击

HarmonyOS鸿蒙Next中如何同时监听2次点击和n次点击

通过gesture的Parallel模式监听两次点击和三次点击实现不同的事件,现在都会触发事件,是否有方法进行识别

.gesture(
  GestureGroup(GestureMode.Parallel,
    TapGesture({ count: 4 }).onAction((event) => {
      if (event) {
        console.log(JSON.stringify(event))
        // console.log('cliclDouble')
      }
    })
    ,
    TapGesture({ count: 3 }).onAction((event) => {
      if (event) {
        // console.log('cliclTriple')
      }
    })
    , LongPressGesture().onAction((event) => {
      console.log('LongPressGesture')
    })
  )


更多关于HarmonyOS鸿蒙Next中如何同时监听2次点击和n次点击的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者您好,根据您提供的代码信息,

  • GestureMode.Exclusive:系统会认为同一时间只能有一个手势被识别。如果一个手势正在被识别,那么其他的手势将不会被处理或会被忽略。
  • GestureMode.Parallel:在这种模式下,系统可以同时识别并处理多个手势。

GestureMode.Parallel模式下在点击4次的时候必然已经点击过3次,所以事件会被监听到,如果您再放一个点击2次的事件也同样会被识别,根本原因在于这个次数问题。

确认下您是否只能使用GestureMode.Parallel模式?是否考虑使用GestureMode.Exclusive模式?

更多关于HarmonyOS鸿蒙Next中如何同时监听2次点击和n次点击的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以通过Gesture模块实现同时监听2次点击和n次点击。使用TapGesture设置count属性为2来监听双击事件,使用MultiTapGesture设置count属性为n来监听n次点击事件。通过GestureGroup将这两个手势组合在一起,实现同时监听。

在HarmonyOS Next中,使用Parallel模式监听多次点击时确实会同时触发多个事件。要区分不同次数的点击事件,建议改用Exclusive模式或通过状态管理来实现:

  1. 使用Exclusive模式替代Parallel模式:
.gesture(
  GestureGroup(GestureMode.Exclusive,
    TapGesture({ count: 2 }).onAction(() => {
      console.log('双击触发');
    }),
    TapGesture({ count: 3 }).onAction(() => {
      console.log('三击触发');
    })
  )
  1. 或者使用计时器实现更精确的控制:
@State clickCount: number = 0;
private timer: number = 0;

handleClick() {
  this.clickCount++;
  clearTimeout(this.timer);
  this.timer = setTimeout(() => {
    if(this.clickCount === 2) {
      // 双击逻辑
    } else if(this.clickCount === 3) {
      // 三击逻辑
    }
    this.clickCount = 0;
  }, 300); // 设置合理的间隔时间
}

这两种方式都能避免Parallel模式下的事件冲突问题,实现不同点击次数的准确识别。

回到顶部