Fastclick 導致click事件觸發兩次的問題
我在移動web上使用Fastclick這個庫去解決300ms延遲問題,但是在安卓4.2下的webview中引發了另一個比較奇怪的bug。
在A頁面中有個 a button,在B頁面中有個 b button,a和b都在同一個position,給a和b都註冊一個click事件。a的click事件觸發後跳轉到B頁面。當a被點選後調到B頁面,你會發現b按鈕的click事件也被觸發了。
沒錯,事件‘穿透’了兩個頁面!
但其實並沒有穿透,點選a按鈕時,其實有如下兩個動作:
- fastclick用touchstart等事件模擬的click事件的觸發,只是第一次click。
- 裝置原本的300ms延遲後的click事件。此時頁面已載入成B,而這個click點選的是B頁面上的b按鈕。
在ios等裝置中,第二個click事件其實被fastclick遮蔽掉了,所以沒出現這個問題,但是在android 4.2的瀏覽器中卻bug搬的遮蔽失效,導致這個問題。
查了許多的相關資料,老外稱這個現象為ghost click
,大部分並沒有什麼有效的解決方案。
最後在stackoverflow中找到了一個hack方案,如下:
preventClick { width:100%; height:100%; position:absolute; z-index:1000; top:0; left:0; }
<body>
<div id="preventClick"></div>
</body>
function onDeviceReady() {
setTimeout(function(){ $('#preventClick').hide(); }, 300);
}
原理是每個頁面前300ms都被一個透明的div去覆蓋,所以第二個click是點不到對應的button。。
雖然這種方式比較暴力,但是還是奏效的,在沒什麼更好的方式前,可以先hack之。
文章作者:forevercjl
文章原文csdn連結:www.foreverpx.cn
轉載請註明出處。
相關文章
- touch事件和click事件多次觸發的問題事件
- WPF 已知問題 監聽 WMI 事件導致觸控失效事件
- click事件"穿透"問題事件穿透
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- jQuery中click事件多次觸發解決方案jQuery事件
- 關於click事件與touch事件衝突的問題事件
- click事件在蘋果手機失效的問題事件蘋果
- 一次oracle行級鎖導致的問題Oracle
- 程式升級觸發阿里雲自身安全機制導致的莫名問題阿里
- $(document).click() 在iphone上不觸發事件解決辦法iPhone事件
- MUI 在上拉載入的容器中手機無法觸發click事件UI事件
- 一次JVM記憶體問題導致的線上事故JVM記憶體
- 記一次儲存問題導致的rac故障案例
- 記錄一次fs配置導致串線的問題
- android 觸控(Touch)事件、點選(Click)事件的區別(詳細解析)Android事件
- 記一次crontab中date命令錯用導致的問題
- MySQL:一次timestamp時區轉換導致的問題MySql
- 記一次 Mac 意外重啟導致的 Homestead 問題Mac
- ANALYZE導致的阻塞問題分析
- MySQL Flush導致的等待問題MySql
- 線上問題排查:記一次 Redis Cluster Pipeline 導致的死鎖問題Redis
- wpf popup導致MouseLeftButtonUp無法觸發
- fastclick.js解決移動端點選事件反應慢問題ASTJS事件
- 一次心跳網路問題導致的節點新增失敗
- JavaScript click 事件JavaScript事件
- jQuery click事件jQuery事件
- click事件生成事件
- 一次錯誤使用 go-cache 導致出現的線上問題Go
- 記一次使用easyexcel匯入excel導致cpu跑滿的問題Excel
- 克隆ORACLE軟體的導致的問題Oracle
- 使用資料庫處理併發可能導致的問題資料庫
- 從零開始,開發一個 Web Office 套件(7):新的問題—— Click 事件的 z-indexWeb套件事件Index
- CAS導致的ABA問題及解決
- MySQL8.0 view導致的效能問題MySqlView
- golang slice使用不慎導致的問題Golang
- 分散式鎖導致的超賣問題分散式
- Laravel 專案一次釋出導致的 BUG(環境變數問題)Laravel變數
- 記錄一次因 mysql 欄位取名不規範導致的問題MySql