微信小程序长按事件触发点击事件的BUG处理

发布时间:2019-06-13 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了微信小程序长按事件触发点击事件的BUG处理脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

微信小程序开发说实话还是有点糟心的,经过事件冒泡的坑之后,又遇到了长按事件(longtap)必触发点击事件(tap)的BUG

实例代码

<@H_126_27@view class="container">
  <view>
    <button bindtap="tap" bindlongtap="longtap">长按我</button>
  </view>
</view>
  • js

Page({
  data: {
  },
  tap: function() {
    console.LOG('触发了 tap')
  },
  longtap: function () {
    console.log('触发了 longtap')
  }
})
  • 效果

微信小程序长按事件触发点击事件的BUG处理

解决方法

GOOGLE后确定是小程序有意(B)为(U)之(G)后,看了一下网上的解决方法,基本都是通过touchstarttouchend重新判定taplongtap事件的,个人不是很喜欢。

看一下微信小程序的事件定义:

  • tap, 手指触摸后马上离开

  • longtap, 手指触摸后,超过350ms再离开

也就是说,目前的触发的顺序是 longtap -> touchend -> tap

那么其实解决也很清晰了,简单来说就是 加把锁, 应用到上面的代码上:

Page({
  data: {
    lock: false
  },
  tap: function() {
    //检查锁
    if (this.data.lock) {
      return;
    }
    console.log('触发了 tap')
  },
  touchend: function() {
    if (this.data.lock) {
      //开锁
      setTimeout(() => {
        this.setData({ lock: false });
      }, 100);
    }
  },
  longtap: function () {
    //锁住
    this.setData({lock: true});
    console.log('触发了 longtap')
  }
})

看一下效果

微信小程序长按事件触发点击事件的BUG处理

延伸

大部分情况下,我们都是不需要在touchend中加锁的,因为长按操作会触发其他的异步操作,只要保证异步操作的最后把锁解除了即可。

脚本宝典总结

以上是脚本宝典为你收集整理的微信小程序长按事件触发点击事件的BUG处理全部内容,希望文章能够帮你解决微信小程序长按事件触发点击事件的BUG处理所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。