日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 双击单机 解决办法

發布時間:2023/12/20 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript 双击单机 解决办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ????? 在jQuery事件綁定中,dbclick可以觸發兩次click事件。例如一個DOM元素div,既綁定了 click 事件,又綁定了 dblclick 事件,這兩個事件分別要做獨立的事情。事件處理上沒有沖突,都可以各自完成各自的操作。雙擊的時候雖然是執行了 dblclick 事件,但是在這之前,也執行了click 事件,那么,如何來禁止或者說屏蔽這次多余的 click 事件呢?本文將提供給您一個比較好的解決辦法。

產生原理分析
  首先,來了解一下點擊事件發生的先后順序:

單擊:mousedown, mouseup, click
雙擊:mousedown, mouseup, click, mousedown, mouseup, click, dblclick
  由此看來,dblclick 事件發生之前,實際上發生了兩次 click 事件。其中,第一次的 click 是會被屏蔽掉,但是第二次則不會,所以就出現在雙擊的時候,也觸發 click 事件。


解決辦法
  知道了原因,接下來自然就是想辦法把這次 click 給屏蔽掉,但是由于各瀏覽器均未提供直接去停止事件的方法,所以值得改變思路。
  由于我們只需要屏蔽一次 click 事件即可,由此聯想到,可以利用 setTimeout() 方法來延時完成 click 事件的處理,在需要停止 click 的時候利用 clearTimeout() 方法停止這一事件的處理。這樣,就可以比較容易的寫出如下的 javascript 代碼:

var timer = null; function do_click(event) {
?clearTimeout(timer); // 這里加一句是為了兼容 Gecko 的瀏覽器 /
if (event.detail == 2)?
return ;?
// 同上句的作用?
timer = setTimeout(function() {?
// click 事件的處理?
}, 300); }?
function do_dblclick(event) {?
clearTimeout(timer);
?// dblclick 事件的處理?
}

問題總結
  從測試結果來看,如果前后兩次點擊的時間在 300ms 左右的時候,還是很容易出現 click 和 dblclick 事件被“同時”調用的情況,而如果間隔的時間更短或更長,則只會有 click 或 dblclick 事件。
  所以,應該說這個方法已經在很大程度上,避免了 click 和 dblclick 事件的“同時”存在問題。當然,它還沒有達到完全解決的程度。

注意
??? windows 的控制面板里是可以調鼠標的雙擊速度的(Linux 等系統下能不能調,俺就不清楚了),這點對于程序還是有一定影響,大家可以自己調節下試試看~
經過測試,延時 300ms 是一個比較理想的事件,既考慮到對鼠標操作并不十分順利的朋友,也兼顧 click 事件的響應速度

??? 以上代碼,只在 IE6、FF3、Chrome 中測試過,并未出現問題

? ? w3c標準是沒有dblclick的,而是通過event.detail來判斷是單擊或雙擊

? ? ? ? ? ? ?

? <input type="button" οnclick="OneClick()" οndblclick="TwoClick()" value="點我">
??????????????????????????????????? <script language="javascript">
??????????????????????????????????????? var v_Result;
??????????????????????????????????????? function OneClick() {
??????????????????????????????????????????? v_Result = false;
??????????????????????????????????????????? window.setTimeout(OneClick_Nei, 500)
??????????????????????????????????????????? function OneClick_Nei() {
??????????????????????????????????????????????? if (v_Result != false) return;
??????????????????????????????????????????????? alert("單擊");
??????????????????????????????????????????? }
??????????????????????????????????????? }
??????????????????????????????????????? function TwoClick() {
??????????????????????????????????????????? v_Result = true;
??????????????????????????????????????????? alert("雙擊");
??????????????????????????????????????? }
??????????????????????????????????? </script>

總結

以上是生活随笔為你收集整理的javascript 双击单机 解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。