最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript鼠標事件逐一分析(附代碼)

 更新時間:2026年06月06日 10:30:04   作者:長城2024  
鼠標事件是Web交互的基石,從最簡單的按鈕點擊到復(fù)雜的拖拽繪圖、游戲控制,都離不開對鼠標事件的監(jiān)聽和處理,這篇文章主要介紹了JavaScript鼠標事件逐一分析的相關(guān)資料,需要的朋友可以參考下

前言

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.clientXe.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ā)。因此,mouseentermouseleave組合是實現(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ù)及說明
1click當(dāng)用戶在元素上按下并釋放鼠標主鍵(通常是左鍵)時觸發(fā)。"click"意為"點擊",模擬鼠標點擊的聲音。element.addEventListener('click', function(event) {...});
element.onclick = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。依賴于 mousedown 和 mouseup 的先后觸發(fā),如果其中任何一個被取消,click 就不會觸發(fā)。
2dblclick當(dāng)用戶在元素上雙擊鼠標主鍵時觸發(fā)。"dbl"是"double"(雙倍)的縮寫,"click"意為點擊。element.addEventListener('dblclick', function(event) {...});
element.ondblclick = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。依賴于兩次連續(xù)的 click 事件,如果任意一次 click 被取消,dblclick 也不會觸發(fā)。
3mousedown當(dāng)用戶在元素上按下任意鼠標按鈕時立即觸發(fā),無需釋放按鈕。"mouse"(鼠標)+ "down"(按下)。element.addEventListener('mousedown', function(event) {...});
element.onmousedown = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象??赏ㄟ^ event.button 判斷按下的鍵(0:左鍵,1:中鍵,2:右鍵)。不能通過鍵盤觸發(fā)。
4mouseup當(dāng)用戶釋放按下的鼠標按鈕時觸發(fā)。"mouse" + "up"(抬起)。element.addEventListener('mouseup', function(event) {...});
element.onmouseup = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。與 mousedown 配對使用,常用來檢測完整的點擊操作。不能通過鍵盤觸發(fā)。
5mousemove當(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í)行耗時操作,以免影響性能。
6mouseover當(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ā)。
7mouseout當(dāng)鼠標指針離開元素邊界時觸發(fā)。移動到子元素上也會觸發(fā)。"mouse" + "out"(離開)。element.addEventListener('mouseout', function(event) {...});
element.onmouseout = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。可通過 event.relatedTarget 獲取鼠標將要去往的元素。會冒泡,移動到子元素時也會觸發(fā)。
8mouseenter當(dāng)鼠標首次進入元素邊界時觸發(fā)。移動到子元素時不會重復(fù)觸發(fā)。"mouse" + "enter"(進入)。element.addEventListener('mouseenter', function(event) {...});
element.onmouseenter = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。DOM3級事件,不會冒泡,移動到子元素時不會重復(fù)觸發(fā),行為更直觀。
9mouseleave當(dāng)鼠標完全離開元素邊界時觸發(fā)。離開到子元素時不會觸發(fā)。"mouse" + "leave"(離開)。element.addEventListener('mouseleave', function(event) {...});
element.onmouseleave = function(event) {...};
回調(diào)函數(shù)接收 MouseEvent 對象。DOM3級事件,不會冒泡,與 mouseenter 配對使用,行為更符合直覺。
10wheel當(dāng)用戶滾動鼠標滾輪或操作類似滾輪的輸入設(shè)備時觸發(fā)。"wheel"意為"滾輪"。element.addEventListener('wheel', function(event) {...});
element.onwheel = function(event) {...};
回調(diào)函數(shù)接收 WheelEvent 對象(繼承自 MouseEvent)??赏ㄟ^ deltaYdeltaX 獲取滾動量。
11contextmenu當(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ù)

四、鼠標事件的注意事項

  1. 事件冒泡與捕獲:除 mouseenter 和 mouseleave 外,大多數(shù)鼠標事件都支持冒泡。這意味著事件會從目標元素向上傳播到父元素。

  2. 事件依賴關(guān)系click 事件依賴于 mousedown 和 mouseup 的完整觸發(fā),dblclick 依賴于兩次連續(xù)的 click 事件。

  3. 性能考慮mousemove 事件會高頻觸發(fā),監(jiān)聽函數(shù)中應(yīng)避免執(zhí)行復(fù)雜的計算或DOM操作。

  4. 瀏覽器兼容性mouseenter 和 mouseleave 是DOM3級事件,現(xiàn)代瀏覽器都支持,但在非常舊的瀏覽器中可能需要回退方案。

  5. 右鍵菜單阻止:使用 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/mouseoutmouseenter/mouseleave的行為差異:前者在進入/離開子元素時會反復(fù)觸發(fā),后者只在進入/離開整個元素時觸發(fā)一次

  • mousemove事件的節(jié)流處理,避免日志過快刷新

  • 自定義右鍵菜單的阻止和顯示

  • 滾輪事件的滾動量信息

通過運行這個示例并觀察日志輸出,可以更深入地理解每個鼠標事件的特性和適用場景。

總結(jié)

到此這篇關(guān)于JavaScript鼠標事件的文章就介紹到這了,更多相關(guān)JS鼠標事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS隱藏參數(shù)post傳值實例

    JS隱藏參數(shù)post傳值實例

    JS隱藏參數(shù)post傳值實例,需要的朋友可以參考一下
    2013-04-04
  • JS異步文件上傳(兼容IE8+)

    JS異步文件上傳(兼容IE8+)

    本文主要介紹了JS實現(xiàn)異步文件上傳的相關(guān)資料,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    小程序websocket心跳庫(websocket-heartbeat-miniprogram)

    這篇文章主要介紹了小程序websocket心跳庫(websocket-heartbeat-miniprogram),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • JS簡易計算器實例講解

    JS簡易計算器實例講解

    這篇文章主要為大家詳細介紹了JS簡易計算器實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • javascript中的window.location.search方法簡介

    javascript中的window.location.search方法簡介

    window.location.search方法是截取當(dāng)前url中“?”后面的字符串,示例如下,感興趣的朋友可以參考下
    2013-09-09
  • JS的事件綁定深入認識

    JS的事件綁定深入認識

    類似于JQuery的這樣js庫已經(jīng)實現(xiàn)了很好的數(shù)據(jù)綁定機制的封裝效果,但只知其然,不知其所以然還有會有種蒙在鼓里的感覺,親自去分析一下具體的實現(xiàn),會有一種豁然開朗的感覺
    2014-06-06
  • js簡單實現(xiàn)表單中點擊按鈕動態(tài)增加輸入框數(shù)量的方法

    js簡單實現(xiàn)表單中點擊按鈕動態(tài)增加輸入框數(shù)量的方法

    這篇文章主要介紹了js簡單實現(xiàn)表單中點擊按鈕動態(tài)增加輸入框數(shù)量的方法,涉及javascript鼠標點擊事件及insertAdjacentHTML方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-08-08
  • JS實現(xiàn)九宮格拼圖游戲

    JS實現(xiàn)九宮格拼圖游戲

    這篇文章主要為大家詳細介紹了JS實現(xiàn)九宮格拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JavaScript實現(xiàn)拼圖式滑塊驗證功能

    JavaScript實現(xiàn)拼圖式滑塊驗證功能

    滑塊驗證碼是在網(wǎng)站、APP等應(yīng)用中常見的一種驗證方式,通過按照一定規(guī)則滑動滑塊到指定位置完成驗證,才可以進行下一步操作,本文給大家分享基于JavaScript實現(xiàn)拼圖式滑塊驗證功能,感興趣的朋友一起看看吧
    2022-06-06
  • 微信小程序上傳圖片功能(附后端代碼)

    微信小程序上傳圖片功能(附后端代碼)

    這篇文章主要為大家詳細介紹了微信小程序上傳圖片功能,還為大家分享了后端代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

调兵山市| 封开县| 彭阳县| 新邵县| 昌邑市| 芜湖县| 潞西市| 囊谦县| 南阳市| 新民市| 驻马店市| 逊克县| 阿荣旗| 百色市| 五河县| 鹤壁市| 五莲县| 石河子市| 桐乡市| 襄樊市| 神木县| 油尖旺区| 阿勒泰市| 肇州县| 浙江省| 陈巴尔虎旗| 天津市| 陈巴尔虎旗| 纳雍县| 衢州市| 五大连池市| 亳州市| 武城县| 苏尼特左旗| 阜南县| 松原市| 仪陇县| 洮南市| 彭阳县| 巴林右旗| 泽普县|