在 JavaScript 中了解與鼠標事件的基本互動方式
在處理鼠標事件時,我們有以下能力:
mousedown鼠標按下mouseup鼠標釋放click點擊事件dblclick雙擊事件mousemove鼠標移動到元素上方時mouseover鼠標移動到元素或其子元素上方時mouseenter鼠標移動到元素上時。類似mouseover但不會冒泡(稍後會詳細解釋!)mouseout鼠標移出元素或進入子元素時mouseleave鼠標移出元素時。類似mouseout但不會冒泡(稍後會詳細解釋!)contextmenu右鍵點擊時打開上下文菜單
事件有重疊。在追踪 click 事件時,就如同追踪 mousedown 後跟著 mouseup 事件。在 dblclick 的情況下,click 也會被觸發兩次。
mousedown、mousemove 和 mouseup 可以組合使用以追踪拖放事件。
對於 mousemove,要小心,因為它在鼠標移動期間會觸發多次。我們需要進行節流處理,這是我們稍後在分析滾動時會談到的。
在事件處理程序中,我們可以訪問許多屬性。
例如,在鼠標事件中,可以通過檢查事件對象的 button 屬性來查看按下了哪個鼠標按鈕:
const link = document.getElementById('my-link')
link.addEventListener('mousedown', event => {
// 鼠標按下
console.log(event.button) // 0=左鍵,2=右鍵
})
以下是我們可以使用的所有屬性:
altKey如果事件觸發時按下了 Alt 鍵則為 truebutton如果有,是觸發鼠標事件時按下的鍵的編號(通常 0 = 主按鈕,1 = 中間按鈕,2 = 右鍵)。適用於由點擊按鈕引起的事件(例如點擊事件)buttons如果有,表示在任何鼠標事件上按下的按鈕的編號clientX/clientY鼠標指針相對於瀏覽器窗口的 x 和 y 坐標,不受滾動影響ctrlKey如果事件觸發時按下了 Ctrl 鍵則為 truemetaKey如果事件觸發時按下了 Meta 鍵則為 truemovementX/movementY鼠標指針相對於上次mousemove事件的位置的 x 和 y 坐標。用於跟踪移動時的鼠標速度region在 Canvas API 中使用relatedTarget事件的次要目標,例如在移動時screenX/screenY鼠標指針在屏幕坐標中的 x 和 y 坐標shiftKey如果事件觸發時按下了 Shift 鍵則為 true