JavaScript鼠標事件逐一分析(附代碼)
前言
JavaScript鼠標事件是指當(dāng)用戶使用鼠標與網(wǎng)頁進行交互時,瀏覽器自動觸發(fā)的一系列信號。這些信號會以事件對象的形式傳遞給JavaScript代碼,讓開發(fā)者能夠捕捉并響應(yīng)用戶的操作,從而實現(xiàn)各種交互效果。
簡單來說,鼠標事件就是用戶鼠標動作與網(wǎng)頁之間的溝通語言。當(dāng)用戶點擊、移動、滾動或懸停時,瀏覽器會發(fā)出相應(yīng)的通知,而開發(fā)者編寫的代碼則可以監(jiān)聽這些通知并做出反應(yīng)。
常見的鼠標事件包括:
點擊類:
click(點擊)、dblclick(雙擊)、mousedown(按下)、mouseup(釋放)移動類:
mousemove(移動)、mouseover(移入)、mouseout(移出)、mouseenter(進入)、mouseleave(離開)特殊類:
wheel(滾輪滾動)、contextmenu(右鍵菜單)
每個鼠標事件都會攜帶豐富的事件對象,包含鼠標位置、按下的按鍵、是否同時按下了功能鍵(如Ctrl、Shift)等信息。這使得開發(fā)者可以精確地控制交互行為,例如判斷用戶點擊的是左鍵還是右鍵、鼠標在頁面中的具體坐標、是否按住Shift鍵進行多選等。
鼠標事件是Web交互的基石,從最簡單的按鈕點擊到復(fù)雜的拖拽繪圖、游戲控制,都離不開對鼠標事件的監(jiān)聽和處理。
一、JavaScript鼠標事件逐一分析
(一)核心鼠標事件(基礎(chǔ)交互)
1.click
含義:當(dāng)用戶在元素上按下并釋放鼠標主鍵(通常是左鍵)時觸發(fā)。它也可以通過在元素獲得焦點時按回車鍵觸發(fā)。
詞源:"click"意為"點擊",模擬鼠標點擊的聲音。
語法:
element.addEventListener('click', function(event) { ... }); // 或 element.onclick = function(event) { ... };參數(shù)及說明:事件回調(diào)函數(shù)接收一個
MouseEvent對象作為參數(shù),包含鼠標位置、按鍵狀態(tài)等信息。注意:click事件依賴于mousedown和mouseup事件的先后觸發(fā),如果其中任何一個被取消,click事件就不會觸發(fā)。簡單示例:
document.getElementById('myButton').addEventListener('click', function(e) { alert('按鈕被點擊了!位置:' + e.clientX + ', ' + e.clientY); });示例分析:這段代碼為ID為"myButton"的按鈕添加了點擊事件監(jiān)聽。當(dāng)按鈕被點擊時,會彈出一個警告框,顯示"按鈕被點擊了!位置:X, Y",其中X和Y是鼠標點擊時相對于瀏覽器視口的坐標。通過
e.clientX和e.clientY可以獲取鼠標的精確位置,這在需要記錄用戶點擊位置或?qū)崿F(xiàn)基于位置的交互時非常有用。
2.dblclick
含義:當(dāng)用戶在元素上雙擊鼠標主鍵時觸發(fā)。
詞源:"dbl"是"double"(雙倍)的縮寫,"click"意為點擊。
語法:
element.addEventListener('dblclick', function(event) { ... }); // 或 element.ondblclick = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象。dblclick依賴于兩次連續(xù)的click事件,如果其中任意一次click被取消,dblclick也不會觸發(fā)。事件對象的detail屬性可以記錄同一像素位置的點擊次數(shù)。簡單示例:
element.addEventListener('dblclick', function(e) { alert('元素被雙擊了!'); });示例分析:這個示例為某個元素添加了雙擊事件監(jiān)聽。當(dāng)用戶快速雙擊該元素時,會彈出"元素被雙擊了!"的提示框。需要注意的是,雙擊事件默認的時間間隔取決于操作系統(tǒng)的鼠標設(shè)置,一般在500毫秒內(nèi)連續(xù)點擊兩次才會被識別為雙擊。在實際應(yīng)用中,雙擊事件常用于實現(xiàn)圖片放大查看、文本選中后的額外操作等場景。
3.mousedown
含義:當(dāng)用戶在元素上按下任意鼠標按鈕時立即觸發(fā),無需釋放按鈕。
詞源:"mouse"(鼠標)+ "down"(按下)。
語法:
element.addEventListener('mousedown', function(event) { ... }); // 或 element.onmousedown = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象??梢酝ㄟ^event.button屬性判斷按下了哪個鍵(0:主鍵/左鍵,1:滾輪/中鍵,2:副鍵/右鍵)。注意:此事件不能通過鍵盤觸發(fā)。簡單示例:
element.addEventListener('mousedown', function(e) { if (e.button === 0) console.log('左鍵按下'); else if (e.button === 2) console.log('右鍵按下'); });示例分析:這段代碼通過判斷
e.button的值來區(qū)分用戶按下了哪個鼠標鍵。e.button === 0表示左鍵,e.button === 2表示右鍵(中鍵是1)。這個特性非常實用,例如在畫板應(yīng)用中,可以區(qū)分左鍵繪圖和右鍵擦除;在游戲中可以區(qū)分不同的攻擊方式。注意e.button的值是在按下瞬間確定的,不會因為后續(xù)其他鍵的按下而改變。
4.mouseup
含義:當(dāng)用戶釋放按下的鼠標按鈕時觸發(fā)。
詞源:"mouse" + "up"(抬起)。
語法:
element.addEventListener('mouseup', function(event) { ... }); // 或 element.onmouseup = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象。與mousedown配對使用,常用來檢測完整的點擊操作。同樣不能通過鍵盤觸發(fā)。簡單示例:
element.addEventListener('mouseup', function(e) { console.log('鼠標按鈕已釋放'); });示例分析:這個示例在鼠標按鈕釋放時在控制臺輸出提示信息。
mouseup事件通常與mousedown配合使用來實現(xiàn)拖拽功能:在mousedown時開始拖拽,在mouseup時結(jié)束拖拽。它也能幫助檢測用戶是否在元素外釋放鼠標,這在實現(xiàn)下拉菜單、模態(tài)框等組件時非常有用。
5.mousemove
含義:當(dāng)鼠標在元素內(nèi)部移動時持續(xù)觸發(fā)。
詞源:"mouse" + "move"(移動)。
語法:
element.addEventListener('mousemove', function(event) { ... }); // 或 element.onmousemove = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象,包含鼠標的實時坐標信息。由于該事件會高頻觸發(fā),在監(jiān)聽函數(shù)中應(yīng)避免執(zhí)行耗時操作,以免影響性能。簡單示例:
document.addEventListener('mousemove', function(e) { console.log(`鼠標當(dāng)前位置:${e.clientX}, ${e.clientY}`); });示例分析:這段代碼在整個文檔上監(jiān)聽鼠標移動,每當(dāng)鼠標移動時就在控制臺輸出當(dāng)前坐標。由于
mousemove事件觸發(fā)頻率非常高(每秒可達數(shù)十次甚至更多),在實際開發(fā)中經(jīng)常需要配合節(jié)流或防抖技術(shù)來優(yōu)化性能。例如,可以用requestAnimationFrame來限制更新頻率,確保動畫流暢的同時避免不必要的計算。
6.mouseover
含義:當(dāng)鼠標指針從元素外部移動到元素邊界內(nèi)時觸發(fā)。如果移動到元素的子元素上,也會再次觸發(fā)。
詞源:"mouse" + "over"(在...上方)。
語法:
element.addEventListener('mouseover', function(event) { ... }); // 或 element.onmouseover = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象??梢酝ㄟ^event.relatedTarget獲取鼠標來自哪個元素(即移出的元素)。此事件會冒泡,且進入子元素時會重復(fù)觸發(fā)。簡單示例:
element.addEventListener('mouseover', function(e) { console.log('鼠標進入了元素'); console.log('來自:', e.relatedTarget); });示例分析:這個示例在鼠標進入元素時輸出提示信息,并通過
e.relatedTarget顯示鼠標是從哪個元素移動過來的。relatedTarget屬性在實現(xiàn)復(fù)雜的懸停效果時非常有用,比如判斷鼠標是從父元素還是兄弟元素進入的。需要注意的是,由于事件冒泡和子元素觸發(fā)機制,當(dāng)鼠標移動到嵌套的子元素上時,父元素的mouseover會再次觸發(fā)。
7.mouseout
含義:當(dāng)鼠標指針離開元素邊界時觸發(fā)。如果鼠標從元素移動到其子元素上,也會觸發(fā)。
詞源:"mouse" + "out"(離開)。
語法:
element.addEventListener('mouseout', function(event) { ... }); // 或 element.onmouseout = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象??梢酝ㄟ^event.relatedTarget獲取鼠標將要去往的元素。此事件會冒泡,且移動到子元素時也會觸發(fā)。簡單示例:
element.addEventListener('mouseout', function(e) { console.log('鼠標離開了元素'); console.log('前往:', e.relatedTarget); });示例分析:這段代碼在鼠標離開元素時輸出提示信息,并通過
e.relatedTarget顯示鼠標將要前往的目標元素。與mouseover類似,當(dāng)鼠標移動到子元素上時,也會觸發(fā)mouseout事件,這在某些場景下可能會帶來意外的行為。例如,在實現(xiàn)下拉菜單時,如果菜單項包含子菜單,使用mouseout可能導(dǎo)致菜單意外關(guān)閉,這時通常會考慮使用mouseleave替代。
8.mouseenter
含義:當(dāng)鼠標首次進入元素邊界時觸發(fā)。與
mouseover不同,它不會冒泡,且移動到子元素時不會重復(fù)觸發(fā)。詞源:"mouse" + "enter"(進入)。
語法:
element.addEventListener('mouseenter', function(event) { ... }); // 或 element.onmouseenter = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象。這是DOM3級事件中添加的新事件,行為更直觀,通常用于避免因元素嵌套導(dǎo)致的多次觸發(fā)問題。簡單示例:
parentElement.addEventListener('mouseenter', function(e) { console.log('鼠標進入了父元素(進入子元素不會重復(fù)觸發(fā))'); });示例分析:這個示例展示了
mouseenter的關(guān)鍵特性:當(dāng)鼠標從父元素外部進入父元素時觸發(fā)一次,之后即使鼠標在父元素內(nèi)部的子元素間移動,也不會再次觸發(fā)。這在實現(xiàn)懸停效果時非常理想,比如導(dǎo)航菜單的下拉顯示——我們希望鼠標進入菜單區(qū)域時顯示子菜單,而不是每次經(jīng)過菜單項都重復(fù)觸發(fā)。
9.mouseleave
含義:當(dāng)鼠標完全離開元素邊界時觸發(fā)。與
mouseout不同,它不會冒泡,且離開元素到其子元素時不會觸發(fā)。詞源:"mouse" + "leave"(離開)。
語法:
element.addEventListener('mouseleave', function(event) { ... }); // 或 element.onmouseleave = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象。也是DOM3級事件中添加的事件,與mouseenter配對使用,行為更符合直覺。簡單示例:
parentElement.addEventListener('mouseleave', function(e) { console.log('鼠標完全離開了父元素'); });示例分析:這個示例與
mouseenter對應(yīng),只有當(dāng)鼠標完全離開父元素(進入父元素外部的區(qū)域)時才會觸發(fā)。即使鼠標從父元素移動到其內(nèi)部的子元素上,也不會觸發(fā)mouseleave。這與mouseout形成鮮明對比——mouseout在離開父元素到子元素時就會觸發(fā)。因此,mouseenter和mouseleave組合是實現(xiàn)懸停下拉菜單、工具提示等組件的理想選擇。
(二)滾輪與上下文菜單事件
10.wheel
含義:當(dāng)用戶滾動鼠標滾輪或操作類似滾輪的輸入設(shè)備(如觸摸板雙指滑動)時觸發(fā)。
詞源:"wheel"意為"滾輪"。
語法:
element.addEventListener('wheel', function(event) { ... }); // 或 element.onwheel = function(event) { ... };參數(shù)及說明:接收
WheelEvent對象(繼承自MouseEvent)。可以通過event.deltaY獲取垂直滾動量,event.deltaX獲取水平滾動量。簡單示例:
document.addEventListener('wheel', function(e) { console.log('滾輪滾動量:', e.deltaY); // 阻止默認滾動行為 e.preventDefault(); });示例分析:這段代碼監(jiān)聽整個文檔的滾輪事件,在控制臺輸出垂直滾動量
e.deltaY,并調(diào)用e.preventDefault()阻止瀏覽器的默認滾動行為。deltaY為正表示向下滾動,為負表示向上滾動,其數(shù)值大小表示滾動速度。這個特性常用于實現(xiàn)自定義滾動效果、圖片縮放(如按住Ctrl鍵滾動放大)、地圖縮放等交互。需要注意的是,阻止默認滾動可能會影響用戶體驗,應(yīng)謹慎使用。
11.contextmenu
含義:當(dāng)用戶嘗試打開上下文菜單時觸發(fā)(通常是點擊鼠標右鍵)。此事件是可以取消的,可以用來自定義右鍵菜單。
詞源:"context"(上下文)+ "menu"(菜單)。
語法:
element.addEventListener('contextmenu', function(event) { ... }); // 或 element.oncontextmenu = function(event) { ... };參數(shù)及說明:接收
MouseEvent對象。調(diào)用event.preventDefault()可以阻止瀏覽器默認的右鍵菜單顯示。簡單示例:
document.addEventListener('contextmenu', function(e) { e.preventDefault(); // 禁用右鍵菜單 alert('自定義右鍵菜單功能'); });示例分析:這個示例通過
e.preventDefault()阻止了瀏覽器默認的右鍵菜單,并用一個簡單的提示框模擬了自定義菜單功能。在實際應(yīng)用中,這通常是構(gòu)建自定義右鍵菜單的第一步——阻止默認菜單后,可以在鼠標位置動態(tài)顯示一個自定義的HTML菜單組件。常用于富文本編輯器、文件管理器、畫板應(yīng)用等場景,提供符合應(yīng)用需求的上下文操作選項。
二、總結(jié)列表
以下是JavaScript中11個常用鼠標事件的總結(jié)列表。
| 事件 | 含義 | 詞源 | 語法 | 參數(shù)及說明 | |
|---|---|---|---|---|---|
| 1 | click | 當(dāng)用戶在元素上按下并釋放鼠標主鍵(通常是左鍵)時觸發(fā)。 | "click"意為"點擊",模擬鼠標點擊的聲音。 | element.addEventListener('click', function(event) {...});element.onclick = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。依賴于 mousedown 和 mouseup 的先后觸發(fā),如果其中任何一個被取消,click 就不會觸發(fā)。 |
| 2 | dblclick | 當(dāng)用戶在元素上雙擊鼠標主鍵時觸發(fā)。 | "dbl"是"double"(雙倍)的縮寫,"click"意為點擊。 | element.addEventListener('dblclick', function(event) {...});element.ondblclick = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。依賴于兩次連續(xù)的 click 事件,如果任意一次 click 被取消,dblclick 也不會觸發(fā)。 |
| 3 | mousedown | 當(dāng)用戶在元素上按下任意鼠標按鈕時立即觸發(fā),無需釋放按鈕。 | "mouse"(鼠標)+ "down"(按下)。 | element.addEventListener('mousedown', function(event) {...});element.onmousedown = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象??赏ㄟ^ event.button 判斷按下的鍵(0:左鍵,1:中鍵,2:右鍵)。不能通過鍵盤觸發(fā)。 |
| 4 | mouseup | 當(dāng)用戶釋放按下的鼠標按鈕時觸發(fā)。 | "mouse" + "up"(抬起)。 | element.addEventListener('mouseup', function(event) {...});element.onmouseup = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。與 mousedown 配對使用,常用來檢測完整的點擊操作。不能通過鍵盤觸發(fā)。 |
| 5 | mousemove | 當(dāng)鼠標在元素內(nèi)部移動時持續(xù)觸發(fā)。 | "mouse" + "move"(移動)。 | element.addEventListener('mousemove', function(event) {...});element.onmousemove = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。該事件會高頻觸發(fā),監(jiān)聽函數(shù)中應(yīng)避免執(zhí)行耗時操作,以免影響性能。 |
| 6 | mouseover | 當(dāng)鼠標指針從元素外部移動到元素邊界內(nèi)時觸發(fā)。移動到子元素上也會再次觸發(fā)。 | "mouse" + "over"(在...上方)。 | element.addEventListener('mouseover', function(event) {...});element.onmouseover = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象??赏ㄟ^ event.relatedTarget 獲取鼠標來自哪個元素。會冒泡,進入子元素時會重復(fù)觸發(fā)。 |
| 7 | mouseout | 當(dāng)鼠標指針離開元素邊界時觸發(fā)。移動到子元素上也會觸發(fā)。 | "mouse" + "out"(離開)。 | element.addEventListener('mouseout', function(event) {...});element.onmouseout = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。可通過 event.relatedTarget 獲取鼠標將要去往的元素。會冒泡,移動到子元素時也會觸發(fā)。 |
| 8 | mouseenter | 當(dāng)鼠標首次進入元素邊界時觸發(fā)。移動到子元素時不會重復(fù)觸發(fā)。 | "mouse" + "enter"(進入)。 | element.addEventListener('mouseenter', function(event) {...});element.onmouseenter = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。DOM3級事件,不會冒泡,移動到子元素時不會重復(fù)觸發(fā),行為更直觀。 |
| 9 | mouseleave | 當(dāng)鼠標完全離開元素邊界時觸發(fā)。離開到子元素時不會觸發(fā)。 | "mouse" + "leave"(離開)。 | element.addEventListener('mouseleave', function(event) {...});element.onmouseleave = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。DOM3級事件,不會冒泡,與 mouseenter 配對使用,行為更符合直覺。 |
| 10 | wheel | 當(dāng)用戶滾動鼠標滾輪或操作類似滾輪的輸入設(shè)備時觸發(fā)。 | "wheel"意為"滾輪"。 | element.addEventListener('wheel', function(event) {...});element.onwheel = function(event) {...}; | 回調(diào)函數(shù)接收 WheelEvent 對象(繼承自 MouseEvent)??赏ㄟ^ deltaY、deltaX 獲取滾動量。 |
| 11 | contextmenu | 當(dāng)用戶嘗試打開上下文菜單時觸發(fā)(通常是點擊鼠標右鍵)。 | "context"(上下文)+ "menu"(菜單)。 | element.addEventListener('contextmenu', function(event) {...});element.oncontextmenu = function(event) {...}; | 回調(diào)函數(shù)接收 MouseEvent 對象。調(diào)用 event.preventDefault() 可以阻止瀏覽器默認的右鍵菜單顯示,用于自定義菜單。 |
三、鼠標事件對象的常用屬性
所有鼠標事件都接收一個 MouseEvent 對象,它包含以下常用屬性:
| 屬性 | 含義 | 說明 |
|---|---|---|
clientX / clientY | 鼠標指針相對于瀏覽器視口(viewport)的坐標 | 不考慮頁面滾動 |
pageX / pageY | 鼠標指針相對于整個文檔的坐標 | 考慮頁面滾動 |
screenX / screenY | 鼠標指針相對于屏幕的坐標 | 以整個顯示器屏幕為參照 |
offsetX / offsetY | 鼠標指針相對于目標元素內(nèi)邊距邊緣的坐標 | 以事件綁定的元素為參照 |
button | 觸發(fā)事件的鼠標按鈕 | 0:左鍵, 1:中鍵, 2:右鍵 |
buttons | 事件觸發(fā)時按下的所有按鈕 | 位掩碼表示多個按鈕同時按下 |
altKey / ctrlKey / shiftKey / metaKey | 布爾值,表示事件觸發(fā)時對應(yīng)的功能鍵是否被按下 | 用于檢測組合操作 |
relatedTarget | 與事件相關(guān)的次要目標 | 主要用于 mouseover/mouseout 等事件 |
detail | 事件細節(jié)信息 | 對于點擊事件,表示點擊次數(shù) |
四、鼠標事件的注意事項
事件冒泡與捕獲:除
mouseenter和mouseleave外,大多數(shù)鼠標事件都支持冒泡。這意味著事件會從目標元素向上傳播到父元素。事件依賴關(guān)系:
click事件依賴于mousedown和mouseup的完整觸發(fā),dblclick依賴于兩次連續(xù)的click事件。性能考慮:
mousemove事件會高頻觸發(fā),監(jiān)聽函數(shù)中應(yīng)避免執(zhí)行復(fù)雜的計算或DOM操作。瀏覽器兼容性:
mouseenter和mouseleave是DOM3級事件,現(xiàn)代瀏覽器都支持,但在非常舊的瀏覽器中可能需要回退方案。右鍵菜單阻止:使用
contextmenu事件并調(diào)用preventDefault()可以自定義右鍵菜單,但某些瀏覽器可能允許用戶通過瀏覽器設(shè)置強制顯示默認菜單。
五、綜合示例
以下示例演示了如何在同一個元素上監(jiān)聽多個鼠標事件,并對每個事件做出響應(yīng):
<div id="demo" style="width:300px;height:300px;background:#f0f0f0;padding:20px;border:2px solid #ccc;">
<h3>鼠標交互區(qū)域</h3>
<p>嘗試不同的鼠標操作:點擊、雙擊、右鍵、進入/離開、移動</p>
<div id="nested" style="width:200px;height:100px;background:#d0d0d0;margin-top:10px;padding:10px;">
嵌套子元素
</div>
</div>
<div id="log" style="margin-top:20px;padding:10px;background:#e0e0e0;height:150px;overflow:auto;"></div>
<script>
const demo = document.getElementById('demo');
const nested = document.getElementById('nested');
const log = document.getElementById('log');
function logEvent(eventName, e) {
const time = new Date().toLocaleTimeString();
const message = `[${time}] ${eventName} - 目標: ${e.target.tagName}, 位置: (${e.clientX}, ${e.clientY})`;
const entry = document.createElement('div');
entry.textContent = message;
log.appendChild(entry);
log.scrollTop = log.scrollHeight; // 自動滾動到底部
}
// 基礎(chǔ)點擊事件
demo.addEventListener('click', (e) => logEvent('click', e));
demo.addEventListener('dblclick', (e) => logEvent('dblclick', e));
demo.addEventListener('mousedown', (e) => logEvent('mousedown', e));
demo.addEventListener('mouseup', (e) => logEvent('mouseup', e));
// 移動事件(添加節(jié)流)
let lastMove = 0;
demo.addEventListener('mousemove', (e) => {
const now = Date.now();
if (now - lastMove > 100) { // 限制每秒最多10次
lastMove = now;
logEvent('mousemove (節(jié)流)', e);
}
});
// 進入/離開事件 - 對比mouseover/mouseout與mouseenter/mouseleave
demo.addEventListener('mouseover', (e) => logEvent('mouseover', e));
demo.addEventListener('mouseout', (e) => logEvent('mouseout', e));
demo.addEventListener('mouseenter', (e) => logEvent('mouseenter', e));
demo.addEventListener('mouseleave', (e) => logEvent('mouseleave', e));
// 右鍵菜單
demo.addEventListener('contextmenu', (e) => {
e.preventDefault();
logEvent('contextmenu (自定義)', e);
});
// 滾輪事件
demo.addEventListener('wheel', (e) => {
logEvent('wheel - deltaY: ' + e.deltaY, e);
// 不阻止默認行為,保持頁面可滾動
});
// 演示relatedTarget
demo.addEventListener('mouseover', (e) => {
if (e.relatedTarget) {
console.log('mouseover - 來自:', e.relatedTarget.tagName);
}
});
demo.addEventListener('mouseout', (e) => {
if (e.relatedTarget) {
console.log('mouseout - 前往:', e.relatedTarget.tagName);
}
});
</script>綜合示例分析:
這個綜合示例創(chuàng)建了一個完整的鼠標事件演示環(huán)境。通過日志面板,可以直觀地看到:
當(dāng)在不同區(qū)域(主區(qū)域和嵌套子元素)執(zhí)行鼠標操作時,各種事件的觸發(fā)順序和頻率
mouseover/mouseout與mouseenter/mouseleave的行為差異:前者在進入/離開子元素時會反復(fù)觸發(fā),后者只在進入/離開整個元素時觸發(fā)一次mousemove事件的節(jié)流處理,避免日志過快刷新自定義右鍵菜單的阻止和顯示
滾輪事件的滾動量信息
通過運行這個示例并觀察日志輸出,可以更深入地理解每個鼠標事件的特性和適用場景。
總結(jié)
到此這篇關(guān)于JavaScript鼠標事件的文章就介紹到這了,更多相關(guān)JS鼠標事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
小程序websocket心跳庫(websocket-heartbeat-miniprogram)
這篇文章主要介紹了小程序websocket心跳庫(websocket-heartbeat-miniprogram),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
javascript中的window.location.search方法簡介
window.location.search方法是截取當(dāng)前url中“?”后面的字符串,示例如下,感興趣的朋友可以參考下2013-09-09
js簡單實現(xiàn)表單中點擊按鈕動態(tài)增加輸入框數(shù)量的方法
這篇文章主要介紹了js簡單實現(xiàn)表單中點擊按鈕動態(tài)增加輸入框數(shù)量的方法,涉及javascript鼠標點擊事件及insertAdjacentHTML方法的相關(guān)使用技巧,需要的朋友可以參考下2015-08-08

