fastclick
FastClick是專門未解決移動端瀏覽器300ms點擊延遲和點擊穿透問題所開發(fā)的一個輕量級的庫溪猿。FastClick實現(xiàn)原理是在檢測到touchend事件的時候,會通過DOM自定義事件立即發(fā)出模擬一個click事件含蓉,并把瀏覽器在300ms之后的click事件阻止掉篱瞎。
點擊穿透問題
說完移動端點擊300ms延遲的問題,還不得不提一下移動端點擊穿透的問題≈廴猓可能有人會想,既然click點擊有300ms的延遲查库,那對于觸摸屏路媚,我們直接監(jiān)聽touchstart事件不就好了嗎? 使用touchstart去代替click事件有兩個不好的地方樊销。 第一:touchstart是手指觸摸屏幕就觸發(fā)整慎,有時候用戶只是想滑動屏幕,卻觸發(fā)了touchstart事件围苫,這不是我們想要的結(jié)果裤园; 第二:使用touchstart事件在某些場景下可能會出現(xiàn)點擊穿透的現(xiàn)象。
什么是點擊穿透剂府? 假如頁面上有兩個元素A和B拧揽。B元素在A元素之上。我們在B元素的touchstart事件上注冊了一個回調(diào)函數(shù)周循,該回調(diào)函數(shù)的作用是隱藏B元素强法。我們發(fā)現(xiàn),當(dāng)我們點擊B元素湾笛,B元素被隱藏了饮怯,隨后,A元素觸發(fā)了click事件嚎研。
這是因為在移動端瀏覽器蓖墅,事件執(zhí)行的順序是touchstart > touchend > click。而click事件有300ms的延遲临扮,當(dāng)touchstart事件把B元素隱藏之后论矾,隔了300ms,瀏覽器觸發(fā)了click事件杆勇,但是此時B元素不見了贪壳,所以該事件被派發(fā)到了A元素身上。如果A元素是一個鏈接蚜退,那此時頁面就會意外地跳轉(zhuǎn)闰靴。