JavaScript中的tap指的是觸摸事件。隨著移動設備的普及,越來越多的網站和應用程序都將iphone的tap事件當做點擊事件的一部分來使用。隨著HTML5的推出和交互式Web應用程序的需求的增加,tap事件成為開發人員用以支持手勢的一個很重要的事件。
touchstart、touchmove和touchend是三個用于構建復雜的手勢(例如拖動)的基本事件(或觸控點)。在大多數情況下,我們只需要一個簡單的tap事件。
element.addEventListener('touchstart',function(e){ startX = e.touches[0].pageX; startY = e.touches[0].pageY; startTime = e.timeStamp; }, false); element.addEventListener('touchend',function(e){ var spanX = e.changedTouches[0].pageX - startX; var spanY = e.changedTouches[0].pageY - startY; var endTime = e.timeStamp; if(Math.abs(spanX) < 5 && Math.abs(spanY) < 5 && endTime - startTime < 500){ e.preventDefault(); doMyFunction(e.target); //點擊事件所調用的函數 } }, false);
上述代碼是一個常見的tap事件的實現方式,當觸摸事件結束時檢查觸摸點是否移動過,如果沒有并且觸摸時間小于500ms,認為用戶已經進行了單擊(tap)。
另一種方法是添加封裝后的tap事件到原型鏈,方便重用:
function addTapEvent(listener, scope) { var startX, startY; return function(e) { var touch = e.changedTouches[0]; switch (e.type) { case 'touchstart': startX = touch.clientX; startY = touch.clientY; break; case 'touchend': if (Math.abs(touch.clientX - startX) < 10 && Math.abs(touch.clientY - startY) < 10) { listener.call(scope, e); } break; } } } element.addEventListener('touchstart', addTapEvent(function(){ alert('tapped!'); }));
這種方式為想要使任何DOM元素具有tap事件的開發人員提供了一種干凈、可擴展和可重用的方法。
在移動端開發中,tap事件是不可或缺的一環。利用它,我們可以實現更流暢、更自然的操作。它是我們提供出色用戶體驗的一個重要的組成部分。