微信小程序,长按事件bindlongtap与点击事件bindtap的冲突

对于同一控件同时设置bindtap和bindlongtap,会发现长按时先出现bindlongtap的事件,然后触发点击事件。

小程序中事件执行的顺序是

点击:touchstart → touchend → tap
长按 touchstart → longtap → touchend → tap

为了解决这个冲突,在没有选择的动作下,才会出发 tap 事件:

  • 定义一个变脸 longtap = 0
  • 在 longtap 事件中,赋值 longtap = 1
  • 在 tap 事件中,如果 longtap 的值是 0,则正常处理
  • 在 tap 事件中,如果 longtap 的值是 1,则赋值 longtap = 2
  • 在 tap 事件中,如果 longtap 的值是 2,则赋值 longtap = 0

代码

wxml

        bindlongtap="chunkLongTap" bindtap="gotoChunk"

js

let longTap = 0 // 0 not
                // 1 long tap
                // 2 tap (follows the long tap in a same action)
                
  chunkLongTap (ev)
  {
    longTap = 1
  },


  gotoChunk (ev)
  {
    const ckid = ev.currentTarget.dataset.ckid
    if (ckid && this.data.theChapter.switch === 'on') {
      if (longTap === 0) {
        wx.navigateTo({
          url: `/pages/book_chunk/chunk?ckid=${ckid}`,
        })
      }
      else if (longTap === 1) {
        longTap = 2
      }
      else if (longTap === 2) {
        longTap = 0
      }
    }
  },
发布了188 篇原创文章 · 获赞 88 · 访问量 58万+

猜你喜欢

转载自blog.csdn.net/henryhu712/article/details/103239302
今日推荐