先貼出實踐中實現的代碼,參考(https://segmentfault.com/q/1010000011640937?sort=created):
parentObj.addEventListener("touchstart", function (e) { console.log('touchstart'); timer = setTimeout(function () { console.log('LongPress'); e.preventDefault(); LongPress(parentObj); }, 800); }); parentObj.addEventListener("touchmove", function (e) { console.log('touchmove'); clearTimeout(timer); timer = 0; }); parentObj.addEventListener("touchend", function (e) { console.log('touchend'); clearTimeout(timer); //if (timer != 0) { // alert('這是點擊,不是長按'); //} return false; });
先獲取元素對象,然后設置ontouchstart和ontouchend事件,注意,這里的是事件,和touchstart(方法)有所區別,然后在手機瀏覽器中,為了避免長按彈出窗口,設置e.preventDefafult()來屏蔽彈出。
其實,這些是比較容易,最常見的實現方式,在網上找資料的時候發現很多其他的實現,比如利用zepto.js插件,這是一個jQuery.js的移動端實現,通過這個庫,實現方式如下:
,這個實現的鏈接(https://segmentfault.com/q/1010000003956296)
自己也實現了,調試過程中,發現,在微信開發者工具里面,沒有問題,longTap能調用,在手機上,就幾乎調用不成功,觸發的概率非常小,不知道是因為和手機上長按時有微小移動有關系。所以最終放棄了這個實現。
**********************************************分割線**********************************************
關於長按的彈窗菜單怎么屏蔽,網上查了很多資料,都是設置e.preventDefault(),來實現,但是一直用的是
//obj.addEventListener("touchstart", function (e) {
// e.preventDefault();
//}, false);
這個設置的應該是屏蔽觸屏的反應,設置屏蔽彈出菜單的應該是這樣:
document.oncontextmenu = function (e) {
e.preventDefault();
};