Skip to content

常见问题

如何同时处理单击与长按事件?

有些场景下,对于同一元素,我们既需要响应单击事件,也需要响应长按操作,例如对于图片:既需要单击预览,也需要长按能发送给好友。不过在小程序中,如果我们写出如下代码的话,会导致在长按操作的情况下触发单击事件的响应函数 onTap

html
<image
    src="https://elvinn.cn/img/xiaohuangji/data/006da5b8bbc58fc8ebe4145d3f34c0d8.gif"
    mode="aspectFit"
    show-menu-by-longpress
    bindtap="onTap"
/>

之所以会这样,是因为当用户长按时,触发的事件依次是 touchstart -> longpress -> touchend -> tap,所以在触发 longpress 事件后,一定会触发 tap 事件。为了让 onTap 函数仅响应单击操作,可以通过 touchstarttouchend 之间的时间间隔来判断:

js
Page({
  onTouchStart(event) {
    this.startTime = event.timeStamp;
  },

  onTouchEnd(event) {
    this.endTime = event.timeStamp;
  },

  onTap(event) {
    if (this.endTime - this.startTime >= 350) {
      // 说明是长按,直接返回
      return;
    }
  },
})

保持独立思考