
在移動端開發過程中,難免會出現點透問題。哪些情況下會出現移動端點透問題?
1.A/B兩個層上下z軸重疊。
2.上層的A點擊后消失或移開。(這一點很重要)
3.B元素本身有默認click事件(如a標簽) 或 B綁定了click事件。
為甚么會出現點透問題?
在這里就跟網聯科技小編一起捋一捋移動端點擊事件的先后順序問題吧!
事件的觸發時間按由早到晚排列為:touchstart 早于 touchend 早于 click。
當手指觸摸到屏幕的時候,系統生成兩個事件,一個是touch 一個是click,touch先執行,touch執行完成后,A遮蓋層從文檔樹上面消失了,而且由于移動端click還有延遲200-300ms的關系,當系統要觸發click的時候,發現在用戶點擊的位置上面,目前離用戶最近的黃色元素B,所以就直接把click事件作用在B元素上面了.
點透問題解決方案:
方案一:
易網最推薦的是統一代碼風格,在對點擊時效沒有高要求的情況,建議事件統一使用click事件,對于非游戲開發的情況,click的時間延遲能夠給人更好的過度體驗。
方案二:
對時效性要求高的情況下,如果b元素并沒有默認的click事件的情況(沒有a鏈接),統一使用touch事件,更有利于用戶反應速度上的體驗。
方案三:
來得很直接github上有個fastclick可以完美解決
引入fastclick.js,因為fastclick源碼不依賴其他庫所以你可以在原生的js前直接加上
window.addEventListener( "load", function() {
FastClick.attach( document.body );
}, false );
或者有zepto或者jqm的js里面加上
$(function() {
FastClick.attach(document.body);
});
當然require的話就這樣:
var FastClick = require(‘fastclick‘);
FastClick.attach(document.body, options);