js中的鼠標(biāo)事件有哪些(用法示例學(xué)習(xí)進(jìn)階)
在JavaScript中,鼠標(biāo)事件是 Web 開(kāi)發(fā)中最常用的事件類型。鼠標(biāo)點(diǎn)擊事件包括 4 個(gè):click(單擊)、dblclick(雙擊)、mousedown(按下)和 mouseup(松開(kāi))。其中 click 事件類型比較常用,而 mousedown 和 mouseup 事件類型多用在鼠標(biāo)拖放、拉伸操作中。
一、鼠標(biāo)事件類型詳細(xì)說(shuō)明
事件類型 | 說(shuō)明 |
---|---|
click | 單擊鼠標(biāo)左鍵時(shí)發(fā)生,如果右鍵也按下則不會(huì)發(fā)生。當(dāng)用戶的焦點(diǎn)在按鈕上并按了 Enter 鍵時(shí),同樣會(huì)觸發(fā)這個(gè)事件 |
dblclick | 雙擊鼠標(biāo)左鍵時(shí)發(fā)生,如果右鍵也按下則不會(huì)發(fā)生 |
mousedown | 單擊任意一個(gè)鼠標(biāo)按鈕時(shí)發(fā)生 |
mouseout | 鼠標(biāo)指針位于某個(gè)元素上且將要移出元素的邊界時(shí)發(fā)生 |
mouseover | 鼠標(biāo)指針移出某個(gè)元素到另一個(gè)元素上時(shí)發(fā)生 |
mouseup | 松開(kāi)任意一個(gè)鼠標(biāo)按鈕時(shí)發(fā)生 |
mousemove | 鼠標(biāo)在某個(gè)元素上時(shí)持續(xù)發(fā)生 |
二、鼠標(biāo)點(diǎn)擊
鼠標(biāo)點(diǎn)擊事件包括 4 個(gè):click(單擊)、dblclick(雙擊)、mousedown(按下)和 mouseup(松開(kāi))。其中 click 事件類型比較常用,而 mousedown 和 mouseup 事件類型多用在鼠標(biāo)拖放、拉伸操作中。當(dāng)這些事件處理函數(shù)的返回值為 false 時(shí),會(huì)禁止綁定對(duì)象的默認(rèn)行為。
示例
在下面示例中,當(dāng)定義超鏈接指向自身時(shí)(多在設(shè)計(jì)過(guò)程中 href 屬性值暫時(shí)使用 “#”或“?”表示),可以取消超鏈接被單擊時(shí)的默認(rèn)行為,即刷新頁(yè)面。
<a name="tag" id="tag" href="#" rel="external nofollow" >a</a> <script> var a = document.getElementsByTagName("a"); //獲取頁(yè)面中所有超鏈接元素 for (var i = 0; i < a.length; i ++) { //遍歷所有a元素 if ((new RegExp(window.location.href)).test(a[i].href)) { //如果當(dāng)前超鏈接href屬性中包含本頁(yè)面的URL信息 a[i].onclick = function () { //則為超鏈接注冊(cè)鼠標(biāo)單擊事件 return false; //將禁止超鏈接的默認(rèn)行為 } } } </script>
當(dāng)單擊示例中的超鏈接時(shí),頁(yè)面不會(huì)發(fā)生跳轉(zhuǎn)(即禁止頁(yè)面發(fā)生刷新效果)。
三、鼠標(biāo)移動(dòng)
mousemove 事件類型是一個(gè)實(shí)時(shí)響應(yīng)的事件,當(dāng)鼠標(biāo)指針的位置發(fā)生變化時(shí)(至少移動(dòng)一個(gè)像素),就會(huì)觸發(fā) mousemove 事件。該事件響應(yīng)的靈敏度主要參考鼠標(biāo)指針移動(dòng)速度的快慢以及瀏覽器跟蹤更新的速度。
示例
下面示例演示了如何綜合應(yīng)用各種鼠標(biāo)事件實(shí)現(xiàn)頁(yè)面元素拖放操作的設(shè)計(jì)過(guò)程。實(shí)現(xiàn)拖放操作設(shè)計(jì)需要解決以下幾個(gè)問(wèn)題。
- 定義拖放元素為絕對(duì)定位以及設(shè)計(jì)事件的響應(yīng)過(guò)程,這個(gè)比較容易實(shí)現(xiàn)。
- 清楚幾個(gè)坐標(biāo)概念:按下鼠標(biāo)時(shí)的指針坐標(biāo),移動(dòng)中當(dāng)前鼠標(biāo)指針坐標(biāo),松開(kāi)鼠標(biāo)時(shí)的指針坐標(biāo),拖放元素的原始坐標(biāo),拖動(dòng)中的元素坐標(biāo)。
- 算法設(shè)計(jì):按下鼠標(biāo)時(shí),獲取被拖放元素和鼠標(biāo)指針的位置,在移動(dòng)中實(shí)時(shí)計(jì)算鼠標(biāo)偏移的距離,并利用該偏移距離加上被拖放元素的原坐標(biāo)位置,獲得拖放元素的實(shí)時(shí)坐標(biāo)。
如下圖所示,其中變量 ox 和 oy 分別記錄按下鼠標(biāo)時(shí)被拖放元素的縱橫坐標(biāo)值,它們可以通過(guò)事件對(duì)象的 offsetLeft 和 offsetTop 屬性獲取。變量 mx 和 my 分別表示按下鼠標(biāo)時(shí),鼠標(biāo)指針的坐標(biāo)位置。而 event.mx 和 event.my 是事件對(duì)象的自定義屬性,用它們來(lái)存儲(chǔ)當(dāng)鼠標(biāo)移動(dòng)時(shí)鼠標(biāo)指針的實(shí)時(shí)位置。
當(dāng)獲取了上面 3 對(duì)坐標(biāo)值之后,就可以動(dòng)態(tài)計(jì)算拖動(dòng)中元素的實(shí)時(shí)坐標(biāo)位置,即 x 軸值為 ox+event.mx-mx,y 軸為 oy+event.my-my。當(dāng)釋放鼠標(biāo)按鈕時(shí),就可以釋放事件類型,并記下松開(kāi)鼠標(biāo)指針時(shí)拖動(dòng)元素的坐標(biāo)值,以及鼠標(biāo)指針的位置,留待下一次拖放操作時(shí)調(diào)用。
整個(gè)拖放操作的示例代碼如下:
<div id="box" ></div> <script> // 初始化拖放對(duì)象 var box = document.getElementById("box"); // 獲取頁(yè)面中被拖放元素的引用指針 box.style.position = "absolute"; // 絕對(duì)定位 box.style.width = "160px"; // 定義寬度 box.style.height = "120px"; // 定義高度 box.style.backgroundColor = "red"; // 定義背景色 // 初始化變量,標(biāo)準(zhǔn)化事件對(duì)象 var mx, my, ox, oy; // 定義備用變量 function e(event){ // 定義事件對(duì)象標(biāo)準(zhǔn)化函數(shù) if( ! event){ // 兼容IE瀏覽器 event = window.event; event.target = event.srcElement; event.layerX = event.offsetX; event.layerY = event.offsetY; } event.mx = event.pageX || event.clientX + document.body.scrollLeft; // 計(jì)算鼠標(biāo)指針的x軸距離 event.my = event.pageY || event.clientY + document.body.scrollTop; // 計(jì)算鼠標(biāo)指針的y軸距離 return event; // 返回標(biāo)準(zhǔn)化的事件對(duì)象 } // 定義鼠標(biāo)事件處理函數(shù) document.onmousedown = function(event){ // 按下鼠標(biāo)時(shí),初始化處理 event = e(event); // 獲取標(biāo)準(zhǔn)事件對(duì)象 o = event.target; // 獲取當(dāng)前拖放的元素 ox = parseInt(o.offsetLeft); // 拖放元素的x軸坐標(biāo) oy = parseInt(o.offsetTop); // 拖放元素的y軸坐標(biāo) mx = event.mx; // 按下鼠標(biāo)指針的x軸坐標(biāo) my = event.my; // 按下鼠標(biāo)指針的y軸坐標(biāo) document.onmousemove = move; // 注冊(cè)鼠標(biāo)移動(dòng)事件處理函數(shù) document.onmouseup = stop; // 注冊(cè)松開(kāi)鼠標(biāo)事件處理函數(shù) } function move(event){ // 鼠標(biāo)移動(dòng)處理函數(shù) event = e(event); o.style.left = ox + event.mx - mx + "px"; // 定義拖動(dòng)元素的x軸距離 o.style.top = oy + event.my - my + "px"; // 定義拖動(dòng)元素的y軸距離 } function stop(event){ // 松開(kāi)鼠標(biāo)處理函數(shù) event = e(event); ox = parseInt(o.offsetLeft); // 記錄拖放元素的x軸坐標(biāo) oy = parseInt(o.offsetTop); // 記錄拖放元素的y軸坐標(biāo) mx = event.mx ; // 記錄鼠標(biāo)指針的x軸坐標(biāo) my = event.my ; // 記錄鼠標(biāo)指針的y軸坐標(biāo) o = document.onmousemove = document.onmouseup = null; // 釋放所有操作對(duì)象 } </script>
四、鼠標(biāo)經(jīng)過(guò)
鼠標(biāo)經(jīng)過(guò)包括移過(guò)和移出兩種事件類型。當(dāng)移動(dòng)鼠標(biāo)指針到某個(gè)元素上時(shí),將觸發(fā) mouseover 事件;而當(dāng)把鼠標(biāo)指針移出某個(gè)元素時(shí),將觸發(fā) mouseout 事件。如果從父元素中移到子元素中時(shí),也會(huì)觸發(fā)父元素的 mouseover 事件類型。
示例
在下面示例中,分別為 3 個(gè)嵌套的 div 元素定義了 mouseover 和 mouseout 事件處理函數(shù),這樣當(dāng)從外層的父元素中移動(dòng)到內(nèi)部的子元素中時(shí),將會(huì)觸發(fā)父元素的 mouseover 事件類型,但是不會(huì)觸發(fā) mouseout 事件類型。
<div> <div> <div>盒子</div> </div> </div> <script> var div = document.getElementsByTagName("div"); // 獲取3個(gè)嵌套的div元素 for(var i=0;i<div.length;i++){ // 遍歷嵌套的div元素 div[i].onmouseover = function(e){ // 注冊(cè)移過(guò)事件處理函數(shù) this.style.border = "solid blue"; } div[i].onmouseout = function(){ // 注冊(cè)移出事件處理函數(shù) this.style.border = "solid red"; } } </script>
五、鼠標(biāo)來(lái)源
當(dāng)一個(gè)事件發(fā)生后,可以使用事件對(duì)象的 target 屬性獲取發(fā)生事件的節(jié)點(diǎn)元素。如果在 IE 事件模型中實(shí)現(xiàn)相同的目標(biāo),可以使用 srcElement 屬性。
示例1
在下面示例中,當(dāng)鼠標(biāo)移過(guò)頁(yè)面中的 div 元素時(shí),會(huì)彈出提示對(duì)話框,提示當(dāng)前元素的節(jié)名稱。
<div>div元素</div> <script> var div = document.getElementsByTagName("div")[0]; div.onmouseover = function(e){ // 注冊(cè)mouseover事件處理函數(shù) var e = e || window.event; // 標(biāo)準(zhǔn)化事件對(duì)象,兼容DOM和IE事件模型 var o = e.target || e.srcElement; // 標(biāo)準(zhǔn)化事件屬性,獲取當(dāng)前事件的節(jié)點(diǎn) alert(o.tagName); // 返回字符串“DIV” } </script>
在 DOM 事件模型中還定義了 currentTarget 屬性,當(dāng)事件在傳播過(guò)程中(如捕獲和冒泡階段)時(shí),該屬性值與 target 屬性值不同。因此,一般在事件處理函數(shù)中,有你哥哥使用該屬性而不是 this 關(guān)鍵詞獲取當(dāng)前對(duì)象。
除了使用上面提到的通用事件屬性外,如果想獲取鼠標(biāo)指針來(lái)移動(dòng)某個(gè)元素,在 DOM 事件模型中可以使用 relatedTarget 屬性獲取當(dāng)前事件對(duì)象的相關(guān)節(jié)點(diǎn)元素;而在 IE 事件模型中,可以使用 fromElement 獲取 mouseover 事件中鼠標(biāo)移到過(guò)的元素,使用 toElement 屬性獲取在 mouseout 事件中鼠標(biāo)移到的文檔元素。
示例2
在下面示例中,當(dāng)鼠標(biāo)移到 div 元素上時(shí),會(huì)彈出“BODY”字符提示信息,說(shuō)明鼠標(biāo)指針是從 body 元素過(guò)來(lái)的;而移開(kāi)鼠標(biāo)指針時(shí),又彈出“BODY”字符提示信息,說(shuō)明離開(kāi) div 元素將要移到的元素。
<div>div元素</div> <script> var div = document.getElementsByTagName("div")[0]; div.onmouseover = function(e){ var e = e || window.event; var o = e.relatedTarget || e.fromElement; //標(biāo)準(zhǔn)化事件屬性,獲取與當(dāng)前事件相關(guān)的節(jié)點(diǎn) alert(o.tagName); } div.onmouseout = function(e){ var e = e || window.event; var o = e.relatedTarget || e.toElement; // 標(biāo)準(zhǔn)化事件屬性,獲取與當(dāng)前事件相關(guān)的節(jié)點(diǎn) alert(o.tagName); } </script>
六、鼠標(biāo)定位
當(dāng)事件發(fā)生時(shí),獲取鼠標(biāo)的位置是件很重要的事件。由于瀏覽器的不兼容性,不同瀏覽器分別在各自事件對(duì)象中定義了不同的屬性,說(shuō)明如下表所示。這些屬性都是以像素值定義了鼠標(biāo)指針的坐標(biāo),但是由于它們參照的坐標(biāo)系不同,導(dǎo)致精確計(jì)算鼠標(biāo)的位置比較麻煩。
屬性及其兼容性
屬性 | 說(shuō)明 | 兼容性 |
---|---|---|
clientX | 以瀏覽器窗口左上頂角為原點(diǎn),定位 x 軸坐標(biāo) | 所有瀏覽器,不兼容 Safari |
clientY | 以瀏覽器窗口左上頂角為原點(diǎn),定位 y 軸坐標(biāo) | 所有瀏覽器,不兼容 Safari |
offsetX | 以當(dāng)前事件的目標(biāo)對(duì)象左上頂角為原點(diǎn),定位 x 軸坐標(biāo) | 所有瀏覽器,不兼容 Mozilla |
offsetY | 以當(dāng)前事件的目標(biāo)對(duì)象左上頂角為原點(diǎn),定位 y 軸坐標(biāo) | 所有瀏覽器,不兼容 Mozilla |
pageX | 以 document 對(duì)象(即文檔窗口)左上頂角為原點(diǎn),定位 x 軸坐標(biāo) | 所有瀏覽器,不兼容 IE |
pageY | 以 document 對(duì)象(即文檔窗口)左上頂角為原點(diǎn),定位 y 軸坐標(biāo) | 所有瀏覽器,不兼容 IE |
screenX | 計(jì)算機(jī)屏幕左上頂角為原點(diǎn),定位 x 軸坐標(biāo) | 所有瀏覽器 |
screenY | 計(jì)算機(jī)屏幕左上頂角為原點(diǎn),定位 y 軸坐標(biāo) | 所有瀏覽器 |
layerX | 最近的絕對(duì)定位的父元素(如果沒(méi)有,則為 document 對(duì)象)左上頂角為元素,定位 x 軸坐標(biāo) | Mozilla 和 Safari |
layerY | 最近的絕對(duì)定位的父元素(如果沒(méi)有,則為 document 對(duì)象)左上頂角為元素,定位 y 軸坐標(biāo) | Mozilla 和 Safari |
示例1
下面介紹如何配合使用多種鼠標(biāo)坐標(biāo)屬性,以實(shí)現(xiàn)兼容不同瀏覽器的鼠標(biāo)定位設(shè)計(jì)方案。
首先,來(lái)看看 screenX 和 screenY 屬性。這兩個(gè)屬性獲得了所有瀏覽器的支持,應(yīng)該說(shuō)是最優(yōu)選用屬性,但是它們的坐標(biāo)系時(shí)計(jì)算機(jī)屏幕,也就是說(shuō),以計(jì)算機(jī)屏幕左上角為定位原點(diǎn)。這對(duì)于以瀏覽器窗口為活動(dòng)空間的網(wǎng)頁(yè)來(lái)說(shuō)沒(méi)有任何價(jià)值。因?yàn)椴煌钠聊环直媛?,不同的瀏覽器窗口大小和位置,都使得在網(wǎng)頁(yè)中定位鼠標(biāo)成為一件很困難的事情。
其次,如果以 document 對(duì)象為坐標(biāo)系,則可以考慮選用 pageX 和 pageY 屬性實(shí)現(xiàn)在瀏覽器窗口中進(jìn)行定位。這對(duì)于設(shè)計(jì)鼠標(biāo)跟隨來(lái)說(shuō)是一個(gè)好主意,因?yàn)楦S元素一般都以絕對(duì)定位的方式在瀏覽器窗口中移動(dòng),在 mousemove 事件處理函數(shù)中把 pageX 和 pageY 屬性值傳遞給跟絕對(duì)定位元素的 top 和 left樣式屬性即可。
IE 事件模型不支持上面的屬性,為此還需尋求兼容 IE 的方法。而看 clientX 和 clientY 屬性是以 window 對(duì)象為坐標(biāo)系,且 IE 事件模型支持它們,可以選用它們。不過(guò)考慮 window 等對(duì)象可能出現(xiàn)的滾動(dòng)條偏移量,所以還應(yīng)加上相對(duì)于 window 對(duì)象的頁(yè)面滾動(dòng)的偏移量。
var posX = 0, posY = 0; var event = event || window.event; if (event.pageX || event.pageY) { posX = event.pageX; posY = event.pageY; } else if (event.clientX || event.clientY) { posX = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; posY = event.clientY + document.documentElement.scrollTop + document.body.scrollTop; }
在上面代碼中,先檢測(cè) pageX 和 pageY 屬性是否存在,如果存在則獲取它們的值;如果不存在,則檢測(cè)并獲取 clientX 和 clientY 屬性值,然后加上 document.documentElement 和 document.body 對(duì)象的 scrollLeft 和 scrollTop 屬性值,這樣在不同瀏覽器中就獲得了相同的坐標(biāo)值。
示例2
封裝鼠標(biāo)定位代碼。設(shè)計(jì)思路:能夠根據(jù)傳遞的具體對(duì)象,以及相對(duì)鼠標(biāo)指針的偏移量,命令該對(duì)象能夠跟隨水保移動(dòng)。
先定義一個(gè)封裝函數(shù),設(shè)計(jì)函數(shù)傳入?yún)?shù)為對(duì)象引用指針、相對(duì)鼠標(biāo)指針的偏移距離,以及事件對(duì)象。然后封裝函數(shù)能夠根據(jù)事件對(duì)象獲取鼠標(biāo)的坐標(biāo)值,并設(shè)置該對(duì)象為絕對(duì)定位,絕對(duì)定位的值為鼠標(biāo)指針當(dāng)前的坐標(biāo)值。
封裝代碼如下:
var pos = function (o, x, y, event) { //鼠標(biāo)定位賦值函數(shù) var posX = 0, posY = 0; //臨時(shí)變量值 var e = event || window.event; //標(biāo)準(zhǔn)化事件對(duì)象 if (e.pageX || e.pageY) { //獲取鼠標(biāo)指針的當(dāng)前坐標(biāo)值 posX = e.pageX; posY = e.pageY; } else if (e.clientX || e.clientY) { posX = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; posY = event.clientY + document.documentElement.scrollTop + document.body.scrollTop; } o.style.position = "absolute"; //定義當(dāng)前對(duì)象為絕對(duì)定位 o.style.top = (posY + y) + "px"; //用鼠標(biāo)指針的y軸坐標(biāo)和傳入偏移值設(shè)置對(duì)象y軸坐標(biāo) o.style.left = (posX + x) + "px"; //用鼠標(biāo)指針的x軸坐標(biāo)和傳入偏移值設(shè)置對(duì)象x軸坐標(biāo) }
下面測(cè)試封裝代碼。為 document 對(duì)象注冊(cè)鼠標(biāo)移動(dòng)事件處理函數(shù),并傳入鼠標(biāo)定位封裝函數(shù),傳入的對(duì)象為 <div> 元素,設(shè)置其位置向鼠標(biāo)指針右下方偏移(10,20)的距離。考慮到 DOM 事件模型通過(guò)參數(shù)形式傳遞事件對(duì)象,所以不要忘記在調(diào)用函數(shù)中還要傳遞事件對(duì)象。
<div id="div1">鼠標(biāo)追隨</div> <script> var div1 = document.getElementById("div1"); document.onmousemove = function (event) { pos (div1, 10, 20, event); } </script>
示例3
獲取鼠標(biāo)指針在元素內(nèi)的坐標(biāo)。使用 offsetX 和 offsetY 屬性可以實(shí)現(xiàn)這樣的目標(biāo),但是 Mozilla 瀏覽器不支持??梢赃x用 layerX 和 layerY 屬性來(lái)兼容 Mozilla 瀏覽器。
設(shè)計(jì)代碼如下:
var event = event || window.event; if (event.offsetX || event.offsetY) { //適用非Mozilla瀏覽器 x = event.offsetX; y = event.offsetY; } else if (event.layerX || event.layerY) { //兼容Mozilla瀏覽器 x = event.layerX; y = event.layerY; }
但是,layerX 和 layerY 屬性是以絕對(duì)定位的父元素為參照物,而不是元素自身。如果沒(méi)有絕對(duì)定位的父元素,則會(huì)以 document 對(duì)象為參照物。為此,可以通過(guò)腳本動(dòng)態(tài)添加或者手動(dòng)添加的方式,設(shè)計(jì)在元素的外層包圍一個(gè)絕對(duì)定位的父元素,這樣可以解決瀏覽器兼容問(wèn)題。考慮到元素之間的距離所造成的誤差,可以適當(dāng)減去 1 個(gè)或幾個(gè)像素的偏移量。
完整設(shè)計(jì)代碼如下:
<input type="text" id="text" /> <span style="position:absolute;"> <div id="div1" style="width:200px;height:160px;border:solid 1px red;">鼠標(biāo)跟隨</div> </span> <script> var t = document.getElementById("text"); var div1 = document.getElementById("div1"); div1.onmousemove = function (event) { var event = event || window.event; //標(biāo)準(zhǔn)化事件對(duì)象 if (event.offsetX || event.offsetY) { t.value = event.offsetX + "" + event.offsetY; } else if (event.layerX || event.layerY) { t.value = (event.layerX-1) + "" + (event.layerY-1); } } </script>
這種做法能夠解決在元素內(nèi)部定位鼠標(biāo)指針的問(wèn)題。但是,由于在元素外面包裹了一個(gè)絕對(duì)定位的元素,會(huì)破壞整個(gè)頁(yè)面的結(jié)構(gòu)布局。在確保這種人為方式不會(huì)導(dǎo)致結(jié)構(gòu)布局混亂的前提下,可以考慮選用這種方法。
七、鼠標(biāo)按鍵
通過(guò)事件對(duì)象的 button 屬性可以獲取當(dāng)前鼠標(biāo)按下的鍵,該屬性可用于 click、mousedown、mouseup 事件類型。不過(guò)不同模型的約定不同,具體說(shuō)明如下表所示。
鼠標(biāo)事件對(duì)象的 button 屬性
單擊 | IE 事件模型 | DOM 事件模型 |
---|---|---|
左鍵 | 1 | 0 |
右鍵 | 2 | 2 |
中鍵 | 4 | 1 |
IE 事件模型支持位掩碼技術(shù),它能夠偵測(cè)到同時(shí)按下的多個(gè)鍵。例如,同時(shí)按下左右鍵,則 button 屬性值為 1+2=3;同時(shí)按下中鍵和右鍵,則 button 屬性值為 2+4=6;同時(shí)按下左鍵和中鍵,則 button 屬性值為 1+4=5;同時(shí)按下 3 個(gè)鍵,則 button 屬性值為 1+2+4=7。
但是 DOM 模型不支持這種掩碼技術(shù),如果同時(shí)按下多個(gè)鍵,就不能夠準(zhǔn)確偵測(cè)。例如,按下右鍵(2)與同時(shí)按下左鍵和右鍵(0+2=2)的值是相同的。因此,對(duì)于 DOM 模型來(lái)說(shuō),這種 button 屬性約定值存在很大的缺陷。不過(guò),在實(shí)際開(kāi)發(fā)中很少需要同時(shí)檢測(cè)多個(gè)鼠標(biāo)按鈕問(wèn)題,一般僅需要探測(cè)鼠標(biāo)左鍵或右鍵單擊行為。
示例
下面代碼能夠監(jiān)測(cè)右鍵單擊操作,并阻止發(fā)生默認(rèn)行為。
document.onclick = function (e) { var e = e || window.event; //標(biāo)準(zhǔn)化事件對(duì)象 if (e.button == 2) { e.preventDefault(); return false; } }
當(dāng)鼠標(biāo)單擊事件發(fā)生時(shí),會(huì)觸發(fā)很多事件:mousedown、mouseup、click、dblclick。這些事件響應(yīng)的順序如下:
mousedown → mouseup → click → mousedown → mouseup → click → dblclick
當(dāng)鼠標(biāo)在對(duì)象間移動(dòng)時(shí),首先觸發(fā)的事件是 mouseout,即在鼠標(biāo)移出某個(gè)對(duì)象時(shí)發(fā)生。接著,在這兩個(gè)對(duì)象上都會(huì)觸發(fā) mousemove 事件。最后,在鼠標(biāo)進(jìn)入對(duì)象上觸發(fā) mouseover 事件。
到此這篇關(guān)于js中的鼠標(biāo)事件有哪些(用法示例學(xué)習(xí))的文章就介紹到這了,更多相關(guān)js鼠標(biāo)事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js常用的鍵盤事件有哪些(用法示例)_鍵碼keyCode對(duì)照表
- JavaScript?鍵盤事件的處理及屬性詳解
- javascript 組合按鍵事件監(jiān)聽(tīng)實(shí)現(xiàn)代碼
- js捕捉鍵盤事件和按鍵鍵值的方法
- js鼠標(biāo)按鍵事件和鍵盤按鍵事件用法實(shí)例匯總
- Atitit.js的鍵盤按鍵事件捆綁and事件調(diào)度
- JavaScript onkeypress事件入門實(shí)例(按下或按住一個(gè)鍵盤按鍵)
- JavaScript onkeydown事件入門實(shí)例(鍵盤某個(gè)按鍵被按下)
- js 事件截取enter按鍵頁(yè)面提交事件示例代碼
- javascript 按鍵事件(兼容各瀏覽器)
- js獲取鍵盤按鍵響應(yīng)事件(兼容各瀏覽器)
- JavaScript 監(jiān)聽(tīng)textarea中按鍵事件
- JavaScript中常見(jiàn)的事件用法小結(jié)
相關(guān)文章
JavaScript基本概念初級(jí)講解論壇貼的學(xué)習(xí)記錄
JavaScript基本概念 論壇貼建議大家看下,都是一些js的高級(jí)的技巧知識(shí)小結(jié)。2009-02-02javascript語(yǔ)言結(jié)構(gòu)小記(一)
今天看了點(diǎn)js語(yǔ)言結(jié)構(gòu)的一部分,我將我比較感興趣地記錄如下,想學(xué)習(xí)js的朋友可以看下。2011-09-09js創(chuàng)建jsonArray傳輸至后臺(tái)及后臺(tái)全面解析
下面小編就為大家?guī)?lái)一篇js創(chuàng)建jsonArray傳輸至后臺(tái)及后臺(tái)全面解析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-04-04瀏覽器中url存儲(chǔ)的JavaScript實(shí)現(xiàn)
這篇文章主要介紹了瀏覽器中url存儲(chǔ)的JavaScript實(shí)現(xiàn),并且簡(jiǎn)單講述了輸入url地址后提示過(guò)去輸入歷史記錄的原理,需要的朋友可以參考下2015-07-07javascript的數(shù)據(jù)類型、字面量、變量介紹
javascript的數(shù)據(jù)類型、字面量、變量介紹,學(xué)習(xí)js的朋友可以參考下2012-05-05js對(duì)象屬性的攔截與Proxy代理與Reflect映射的用法和區(qū)別講解
reflect和proxy都是JavaScript中用于處理對(duì)象的特殊API,下面這篇文章主要給大家介紹了關(guān)于js對(duì)象屬性的攔截與Proxy代理與Reflect映射的用法和區(qū)別,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06簡(jiǎn)介JavaScript中的setTime()方法的使用
這篇文章主要介紹了簡(jiǎn)介JavaScript中的setTime()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06