找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索本站精品资源

首页 教程频道 小程序开发 查看内容

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

作者:模板之家 2018-4-20 10:56 10449人关注

微信小程序开发说实话还是有点糟心的,经过时间冒泡的坑之后,又遇到了长按事件(longtap)必触发点击事件(tap)的BUG 如下代码 wxml viewclass=container view buttonbindtap=tapbindlongtap=longtap长按我

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

如下代码

  • wxml
<viewclass="container">
  <view>
    <buttonbindtap="tap"bindlongtap="longtap">长按我</button>
  </view>
</view>
  • js
Page({
  data: {
  },
  tap: function(){
    console.log('触发了 tap')
  },
  longtap: function(){
    console.log('触发了 longtap')
  }
})
  • 效果

解决方法

Google后确定是BUG后,看了一下网上的解决方法,基本都是通过 touchstart 和 touchend重新判定 tap 和 longtap 事件的,个人不是很喜欢。

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

  • 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')
  }
})

看一下效果

延伸

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



路过

雷人

握手

鲜花

鸡蛋
原作者: 模板之家 来自: 网络收集

全部回复(0)