微信小程序開發(fā)說實話還是有點糟心的,經(jīng)過事件冒泡的坑之后,又遇到了長按事件(longtap)必觸發(fā)點擊事件(tap)的BUG實例代碼wxmlview class="container" view button bindtap="tap" bindlongtap="longtap"長按我/butt ...
微信小程序開發(fā)說實話還是有點糟心的,經(jīng)過事件冒泡的坑之后,又遇到了長按事件(longtap)必觸發(fā)點擊事件(tap)的BUG
wxml
<view class="container">
<view>
<button bindtap="tap" bindlongtap="longtap">長按我button>
view>
view>
js
Page({
data: {
},
tap: function() {
console.log('觸發(fā)了 tap')
},
longtap: function () {
console.log('觸發(fā)了 longtap')
}
})
效果

Google后確定是小程序有意(B)為(U)之(G)后,看了一下網(wǎng)上的解決方法,基本都是通過touchstart和touchend重新判定tap和longtap事件的,個人不是很喜歡。
看一下微信小程序的事件定義:
tap, 手指觸摸后馬上離開
longtap, 手指觸摸后,超過350ms再離開
也就是說,目前的觸發(fā)的順序是 longtap -> touchend -> tap
那么其實解決也很清晰了,簡單來說就是 加把鎖, 應(yīng)用到上面的代碼上:
Page({
data: {
lock: false
},
tap: function() {
//檢查鎖
if (this.data.lock) {
return;
}
console.log('觸發(fā)了 tap')
},
touchend: function() {
if (this.data.lock) {
//開鎖
setTimeout(() => {
this.setData({ lock: false });
}, 100);
}
},
longtap: function () {
//鎖住
this.setData({lock: true});
console.log('觸發(fā)了 longtap')
}
})
看一下效果

大部分情況下,我們都是不需要在touchend中加鎖的,因為長按操作會觸發(fā)其他的異步操作,只要保證異步操作的最后把鎖解除了即可。

問:這個是文檔的分享API,帶參數(shù)分享出去 , 當(dāng)用戶點擊進(jìn)來的時候,我并不能在onload的options獲取 ,請問我該如何獲取這個ID呢?
答:這個方法試一試。`onLoad:function(options){
var id=options.id;
}`