鼠標事件瀏覽器
與鼠標相關的事件,繼承了 MouseEvent 接口函數
click 按下鼠標(一般是按下主按鈕)時觸發。 mousedown 首先觸發,mouseup 接着觸發,click 最後觸發
dblclick 在同一個元素上雙擊鼠標時觸發。 在mousedown、mouseup、click 以後觸發 dbclick性能
mousedown 按下鼠標鍵時觸發。
mouseup 釋放按下的鼠標鍵時觸發。spa
mousemove 當鼠標在一個節點內部移動時觸發。當鼠標持續移動時,該事件會連續觸發。爲了不性能問題,建議對該事件的監聽函數作一些限定,好比限定一段時間內只能運行一次。code
mouseenter 鼠標進入一個節點時觸發,進入子節點不會觸發這個事件(詳見後文)。
mouseleave 鼠標離開一個節點時觸發,離開父節點不會觸發這個事件(詳見後文)。對象
mouseover 鼠標進入一個節點時觸發,進入子節點會再一次觸發這個事件(詳見後文)。
mouseout 鼠標離開一個節點時觸發,離開父節點也會觸發這個事件(詳見後文)。
contextmenu 按下鼠標右鍵時(上下文菜單出現前)觸發,或者按下「上下文菜單鍵」時觸發。
wheel 滾動鼠標的滾輪時觸發,該事件繼承的是 WheelEvent 接口。blog
var event = new MouseEvent(eventType, options);
options 除了Event 接口的實例配置屬性,該對象能夠配置如下屬性,全部屬性都是可選的繼承
screenX 數值 鼠標相對於屏幕的水平位置(單位像素),默認值爲 0,設置該屬性不會移動鼠標。
screenY 數值 鼠標相對於屏幕的垂直位置(單位像素),其餘與 screenX 相同。接口
clientX 數值 鼠標相對於程序窗口的水平位置(單位像素),默認值爲0,設置該屬性不會移動鼠標。
clientY 數值 鼠標相對於程序窗口的垂直位置(單位像素),其餘與 clientX 相同。seo
ctrlKey 布爾值 是否同時按下了 Ctrl 鍵,默認值爲 false。
shiftKey 布爾值 是否同時按下了 Shift 鍵,默認值爲 false。
altKey 布爾值 是否同時按下 Alt 鍵,默認值爲 false。
metaKey 布爾值 是否同時按下 Meta 鍵,默認值爲 false。
button 數值 表示按下了哪個鼠標按鍵,默認值爲0,表示按下主鍵(一般是鼠標的左鍵)或者當前事件沒有定義這個屬性;
1表示按下輔助鍵(一般是鼠標的中間鍵),2表示按下次要鍵(一般是鼠標的右鍵)。
buttons 數值 表示按下了鼠標的哪些鍵,是一個三個比特位的二進制值,默認爲0(沒有按下任何鍵)。
1(二進制001)表示按下主鍵(一般是左鍵),
2(二進制010)表示按下次要鍵(一般是右鍵),
4(二進制100)表示按下輔助鍵(一般是中間鍵)。
所以,若是返回3(二進制011)就表示同時按下了左鍵和右鍵。
relatedTarget 節點對象 表示事件的相關節點,默認爲 null。
mouseenter 和 mouseover 事件時,表示鼠標剛剛離開的那個元素節點;
mouseout 和 mouseleave 事件時,表示鼠標正在進入的那個元素節點。
// HTML 代碼以下 // <body onclick="showKey(event)"> function showKey(e) { console.log('ALT key pressed: ' + e.altKey); console.log('CTRL key pressed: ' + e.ctrlKey); console.log('META key pressed: ' + e.metaKey); console.log('SHIFT key pressed: ' + e.shiftKey); };
event.button 返回一個數值,表示事件發生時按下了鼠標的哪一個鍵
0 按下主鍵(一般是左鍵),或者該事件沒有初始化這個屬性(好比mousemove
事件)。
1 按下輔助鍵(一般是中鍵或者滾輪鍵)。
2 按下次鍵(一般是右鍵)
// HTML 代碼爲 // <button onmouseup="whichButton(event)">點擊</button>
var whichButton = function (e) { switch (e.button) { case 0: console.log('Left button clicked.'); break; case 1: console.log('Middle button clicked.'); break; case 2: console.log('Right button clicked.'); break; default: console.log('Unexpected code: ' + e.button); }; };
event.buttons 返回一個三個比特位的值,表示同時按下了哪些鍵。
它用來處理同時按下多個鼠標鍵的狀況。
1 二進制爲001(十進制的1),表示按下左鍵。
2 二進制爲010(十進制的2),表示按下右鍵。
4 二進制爲100(十進制的4),表示按下中鍵或滾輪鍵。
event.clientX 返回鼠標位置相對於瀏覽器窗口左上角的水平座標(單位像素) 只讀屬性
event.clientY 返回鼠標位置相對於瀏覽器窗口左上角的垂直座標 只讀屬性
event.screenX 返回鼠標位置相對於屏幕左上角的水平座標(單位像素) 只讀屬性
event.screenY 返回鼠標位置相對於屏幕左上角的垂直座標 只讀屬性
event.movementX 返回當前位置與上一個 mousemove 事件之間的水平距離(單位像素)
event.movementY 返回當前位置與上一個 mousemove 事件之間的垂直距離(單位像素)
event.movementX = event.screenX - oldEvent.screenX
event.offsetX 返回 鼠標位置 與 目標節點 border-left 的水平距離(單位像素) 只讀屬性。
event.offsetY 返回 鼠標位置 與 目標節點 上方的 border-top 的垂直距離 只讀屬性。
/* HTML 代碼以下 <style> p { width: 100px; height: 100px; padding: 100px; } </style> <p>Hello</p> */ var p = document.querySelector('p'); p.addEventListener('click', function (e) { console.log(e.offsetX); // 150 console.log(e.offsetY); // 150 }, false);
event.pageX 返回 鼠標位置 與 網頁左側邊緣 的距離(單位像素) 包括網頁 scroll 的部分 只讀屬性
event.pageY 返回 鼠標位置 與 網頁上側邊緣 的距離(單位像素) 包括網頁 scroll 的部分 只讀屬性
/* HTML 代碼以下 <style> body { height: 2000px; } </style> */ document.body.addEventListener('click', function (e) { console.log(e.pageX); console.log(e.pageY); }, false);
event.relatedTarget 返回事件的相關節點。 對於那些沒有相關節點的事件,該屬性返回null。 該屬性只讀
事件名稱 target relatedTarget
focusin 接受焦點的節點 喪失焦點的節點
focusout 喪失焦點的節點 接受焦點的節點
mouseenter 將要進入的節點 將要離開的節點
mouseleave 將要離開的節點 將要進入的節點
mouseout 將要離開的節點 將要進入的節點
mouseover 將要進入的節點 將要離開的節點
dragenter 將要進入的節點 將要離開的節點
dragexit 將要離開的節點 將要進入的節點
/**** <div id="outer" style=" height:500px; width:500px; border:1px solid black;"> <div id="inner" style=" height:250px; width:250px; border:1px solid black;"></div> </div> ****/ window.addEventListener("DOMContentLoaded", function(){ /**** event.relatedTarget ****/ var inner = document.getElementById('inner'); var outer = document.getElementById('outer'); outer.addEventListener('mouseover', function (event) { console.log('over進入' + event.target.id + ' 離開' + event.relatedTarget.id); }, false); outer.addEventListener('mouseout', function () { console.log('over離開' + event.target.id + ' 進入' + event.relatedTarget.id); }); outer.addEventListener('mouseenter', function (event) { console.log('enter進入' + event.target.id + ' 離開' + event.relatedTarget.id); }); outer.addEventListener("mouseleave", function (){ console.log('leave離開' + event.target.id + ' 進入' + event.relatedTarget.id); }); // 鼠標從 outer 進入inner,輸出 // 進入inner 離開outer // enter進入inner 離開outer // 鼠標從 inner進入 outer,輸出 // 離開inner 進入outer // leave離開inner 進入outer }, false);
event.getModifierState()
返回一個布爾值,表示有沒有按下特定的功能鍵。它的參數是一個表示功能鍵的字符串
// 是否按下了 大寫 鍵 document.addEventListener('click', function (e) { console.log(e.getModifierState('CapsLock')); }, false);
繼承了 MouseEvent 實例,表明鼠標滾輪事件的實例對象
var wheelEvent = new WheelEvent(type, options);
第一個參數是字符串,表示事件類型,對於滾輪事件來講,這個值目前只能是 "wheel"
第二個參數是事件的配置對象。
deltaX 表示滾輪的水平滾動量,默認值是 0.0。
deltaY 表示滾輪的垂直滾動量,默認值是 0.0。
deltaZ 表示滾輪的 Z 軸滾動量,默認值是 0.0。
deltaMode 表示相關的滾動事件的單位,適用於上面三個屬性。
0 表示滾動單位爲像素,1 表示單位爲行,2 表示單位爲頁,默認爲 0
event.deltaX 表示滾輪的水平滾動量
event.deltaY 表示滾輪的垂直滾動量
event.deltaZ 表示滾輪的 Z 軸滾動量
event.deltaMode 表示上面三個屬性的單位,0是像素,1是行,2是頁