首先介紹tap事件:es6
//定義tap函數,傳入須要綁定的元素,和一個回調函數 function tap(el,callBack){ var startTime = 0; var maxTime = 250; var [startX,startY,endX,endY] = [0,0,0,0]; //es6解構賦值 el.addEventListener('touchstart',function(e){ console.log('touchstart'); startTime = Date.now(); //開始觸摸的事件 startX = e.touches[0].clientX; //手指在瀏覽器橫座標 startY = e.touches[0].clientY; //手指在瀏覽器縱座標 }) el.addEventListener('touchmove',function(e){ console.log('touchmove'); endX = e.touches[0].clientX; //手指在瀏覽器橫座標 endY = e.touches[0].clientY; //手指在瀏覽器縱座標 }) el.addEventListener('touchend',function(e){ console.log('touchend'); if( (Date.now()-startTime) > maxTime){ //若是超過了最大時間,不觸發tap console.log('超時了'); return ; } //若是移動距離過大,則不是tap事件。爲了你們在電腦上能看到效果,這裏設置成了1000,由於在電腦上移動幅度很差控制。若是是在移動端,設置爲30就差很少了。 if(Math.abs(endX-startX) > 1000 || Math.abs(endY-startY) > 1000){ return; } callBack(e); }) } tap(document.documentElement,function(e){ console.log(e); });
梳理一下:tap事件的順序就是 touchstart -> touchmove -> touchend -> 在touchend中執行回調瀏覽器
tap點透的原理:函數
tap點透的解決方案:code