一、移動端與PC端的區別html
二、如何解決移動端click屏幕產生200-300ms的延遲響應問題?jquery
當用戶一次點擊屏幕以後,瀏覽器並不能馬上判斷用戶是要進行雙擊縮放,仍是想要進行單擊操做。所以,iOS Safari 就等待 300 毫秒,以判斷用戶是否再次點擊了屏幕。android
因而,300 毫秒延遲就這麼誕生了。ios
步驟一:引入js文件:
步驟二:引入下面任何一種js代碼
//第一種 最好在body前面引入下面的代碼
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
//第二種:引入jquery組件
$(function() {
FastClick.attach(document.body);
})
//第三種
window.addEventListener( "load", function() {
FastClick.attach( document.body );
}, false );
能夠看出zepto的tap經過兼聽綁定在document上的touch事件來完成tap事件的模擬的,及tap事件是冒泡到document上觸發的,
再點擊完成時的tap事件(touchstart\touchend)須要冒泡到document上纔會觸發,而在冒泡到document以前,用戶手的接觸屏幕(touchstart)
和離開屏幕(touchend)是會觸發click事件的,由於click事件有延遲觸發(這就是爲何移動端不用click而用tap的緣由)(大概是300ms,
爲了實現safari的雙擊事件的設計),因此在執行完tap事件以後,彈出來的選擇組件立刻就隱藏了,此時click事件還在延遲的300ms之中,
當300ms到來的時候,click到的其實不是完成而是隱藏以後的下方的元素,若是正下方的元素綁定的有click事件此時便會觸發,
若是沒有綁定click事件的話就當沒click,可是正下方的是input輸入框(或者select選擇框或者單選複選框),點擊默認聚焦而彈出輸入鍵盤,
也就出現了上面的點透現象。
window.addEventListener( "load", function() {
FastClick.attach( document.body );
}, false );
$(function() {
FastClick.attach(document.body);
});
var FastClick = require(‘fastclick‘);
FastClick.attach(document.body, options);
$("#cbFinish").on("touchend", function (event) {
//不少處理好比隱藏什麼的
event.preventDefault();
});
$("#cbFinish").on("tap", function (event) {
setTimeout(function(){
//不少處理好比隱藏什麼的
},320);
});