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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript区分click事件和mousedown(mouseup、mousemove)方法

發(fā)布時間:2025/5/22 javascript 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript区分click事件和mousedown(mouseup、mousemove)方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在前端開發(fā)工作中,會遇到這樣問題:針對同一個dom元素,即希望為它綁定click事件,又想該元素可以允許拖拽的效果。而使用拖拽的效果,我們一般就會用到mousedown,mousemove和mouseup事件。但mousedown、mouseup就會和click事件發(fā)生沖突。我們希望在拖拽元素的時候不希望它執(zhí)行click方法,在執(zhí)行click方法是不希望執(zhí)行mousedown和mouseup方法。

比如如下代碼,就會出現(xiàn)上面的問題:

<!DOCTYPE html> <html> <head lang="en"><meta charset="UTF-8"><title></title><script src="js/jquery-1.11.2.js"></script><script>$(function(){$("#mydiv").on("click",function(){console.log("this is click event");});$("#mydiv").on("mousedown",function(){console.log("this is mousedown event");});$("#mydiv").on("mouseup",function(){console.log("this is mouseup event");});

});
</script> </head> <body><div id="mydiv" style="width:200px;height:200px;background: red;"> </div> </body> </html>

上述代碼在控制臺的輸出結(jié)果如下:

this is mousedown event
this is mouseup event
this is click event

可以看到,mousedown 和mouseup是優(yōu)先于click事件先執(zhí)行的。

而我們希望的效果是,在移動元素的操作中不執(zhí)行click事件,在執(zhí)行click事件時不調(diào)用mousedown和mouseup方法。

區(qū)分click事件和鼠標拖拽元素后在松開事件其實很簡單,用一個全局標識符就可以了。

我們不用在為元素綁定click事件,而是只使用它的mousedown,mousemove,mouseup事件來判斷是否該元素被拖拽了。

具體參見代碼,可以看注釋:

<!DOCTYPE html> <html> <head lang="en"><meta charset="UTF-8"><title></title><script src="js/jquery-1.11.2.js"></script><script>$(function(){var hasMove=false; //全局標識,初始化標識元素沒有發(fā)生mousemove $("#mydiv").on("mousedown",function(){hasMove=false;});$("#mydiv").on("mouseup",function(){//根據(jù)是否發(fā)生移動狀態(tài)來模擬click事件和拖拽后釋放鼠標事件if(hasMove){console.log("移動后鼠標松開事件");}else{console.log("沒有移動鼠標松開事件,模擬click");}hasMove=false; //還原標識,以便下一次使用 });$("#mydiv").on("mousemove",function(){hasMove=true; //元素移動事件中跟新標識為true,表示有發(fā)生移動 });});</script> </head> <body><div id="mydiv" style="width:200px;height:200px;background: red;"> </div> </body> </html>

效果和控制臺如圖

如此,放棄使用click事件機制,以mousemove事件和mouseup事件動態(tài)改變?nèi)謽俗R符,來區(qū)分在鼠標釋放一刻元素是否發(fā)生移動,以此來判斷該事件是click還是拖拽。

感謝閱讀。

?

轉(zhuǎn)載于:https://www.cnblogs.com/chunyangji/p/5896933.html

總結(jié)

以上是生活随笔為你收集整理的JavaScript区分click事件和mousedown(mouseup、mousemove)方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。