国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js不完美解決click和dblclick事件沖突問題

2024-05-06 14:21:38
字體:
供稿:網(wǎng)友
情況描述
  當(dāng)某個(gè)元素,如:div,同時(shí)綁定了click事件和dblclick事件,而這兩個(gè)事件又要處理相對(duì)獨(dú)立的業(yè)務(wù),也就是click的時(shí)候不能觸發(fā)dblclick,dblclick的時(shí)候不能觸發(fā)click。在實(shí)際測(cè)試中發(fā)現(xiàn),當(dāng)dblclick的時(shí)候,總會(huì)出現(xiàn)1次click。下文將要解決的就是這個(gè)問題。
情況分析
  首先我們要清楚click和dblclick的執(zhí)行順序,測(cè)試過程略,下面是測(cè)試結(jié)果:
  click:mousedown -- mouseup -- click
  dblclick:mousedown -- mouseup -- click -- mousedown -- mouseup -- click -- dblclick
  由此看來,在dblclick觸發(fā)之前,實(shí)際上是執(zhí)行了2次click,而第一次的click是會(huì)屏蔽掉的(為什么?好把,我也不知道)。
解決方案
  最先想到的是否可以停止事件,但發(fā)現(xiàn)瀏覽器并未提供相應(yīng)方法,如果自己去實(shí)現(xiàn)難度太大,因?yàn)閱螕羰录P(guān)聯(lián)的行為必須做成是可以被cancel的才行。
  于是考慮用延遲,也是我唯一能想到的解決辦法,利用setTimeout()來延遲完成click事件的處理,然后在需要屏蔽click的時(shí)候用clearTimeout()來停止。
具體代碼
代碼如下:
var test = (function(){
var clickText = 'click<br>';
var dblclickText = 'dblclick<br>';
var timer = null;
return {
click: function(){
clearTimeout(timer);
timer = setTimeout(function(){
$('body').append(clickText);
}, 300);
},
dblclick: function(){
clearTimeout(timer);
$('body').append(dblclickText);
},
init: function(){
$(function(){
$('div').click(test.click).dblclick(test.dblclick);
});
}
}
})();
test.init();

html代碼
代碼如下:
<div style="width:100px;height:100px;background:red;text-align:center;line-height:33px;-moz-user-select:none;-khtml-user-select:none;user-select:none">click<br>or<br>dblclick</div>

后續(xù)
  文章標(biāo)題里就說了,是不完美的,因?yàn)閣indows下,控制面板里是可以調(diào)鼠標(biāo)的雙擊速度的(其他系統(tǒng)不清楚),所以我設(shè)置系統(tǒng)設(shè)置的雙擊速度較慢,則上面那個(gè)demo就不生效了。所以300毫秒只是一個(gè)大概的。
作者:胡尐睿
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 绿春县| 岳阳县| 攀枝花市| 闻喜县| 扬中市| 辽宁省| 黄陵县| 马鞍山市| 宁远县| 旬阳县| 宜昌市| 托克逊县| 新沂市| 开封县| 义乌市| 方正县| 睢宁县| 西和县| 遂宁市| 武鸣县| 高州市| 孝义市| 晋城| 深圳市| 中超| 黄山市| 札达县| 葫芦岛市| 英山县| 师宗县| 东光县| 辽阳市| 浦县| 福安市| 繁峙县| 景东| 巩义市| 嘉黎县| 天气| 河津市| 裕民县|