元素:mouseleave 事件
當定點裝置(通常是滑鼠)的游標移出某個 Element 時,會觸發 mouseleave 事件。
mouseleave 和 mouseout 相似,但不同之處在於 mouseleave 不會冒泡,而 mouseout 會。這意味著當指標離開元素及其所有後代時,會觸發 mouseleave,而當指標離開元素或離開元素的某個後代時,會觸發 mouseout,這是由於冒泡(即使指標仍在該元素內)。除此之外,如果適用,在相同情況下,leave 和 out 事件會同時分派。
當元素從 DOM 中替換或移除時,不會觸發 mouseleave 和 mouseout 事件。
請注意,“移出元素”是指元素在 DOM 樹中的位置,而不是其視覺位置。例如,如果兩個同級元素定位方式使其中一個位於另一個內部,那麼從外部元素移到內部元素會觸發外部元素的 mouseleave,即使指標仍在外部元素的邊界內。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
addEventListener("mouseleave", (event) => { })
onmouseleave = (event) => { }
事件型別
一個 MouseEvent。繼承自 UIEvent 和 Event。
事件屬性
此介面還繼承其父級 UIEvent 和 Event 的屬性。
MouseEvent.altKey只讀-
如果滑鼠事件觸發時 alt 鍵處於按下狀態,則返回
true。 -
滑鼠事件觸發時按下的按鈕編號(如果適用)。
-
滑鼠事件觸發時按下的按鈕(如果有)。
MouseEvent.clientX只讀-
滑鼠指標在視口座標中的 X 座標。
MouseEvent.clientY只讀-
滑鼠指標在視口座標中的 Y 座標。
MouseEvent.ctrlKey只讀-
如果滑鼠事件觸發時 control 鍵處於按下狀態,則返回
true。 MouseEvent.layerX非標準 只讀-
返回事件相對於當前圖層的水平座標。
MouseEvent.layerY非標準 只讀-
返回事件相對於當前圖層的垂直座標。
MouseEvent.metaKey只讀-
如果滑鼠事件觸發時 meta 鍵處於按下狀態,則返回
true。 MouseEvent.movementX只讀-
滑鼠指標相對於上次
mousemove事件位置的 X 座標。 MouseEvent.movementY只讀-
滑鼠指標相對於上次
mousemove事件位置的 Y 座標。 MouseEvent.offsetX只讀-
滑鼠指標相對於目標節點內邊距邊緣位置的 X 座標。
MouseEvent.offsetY只讀-
滑鼠指標相對於目標節點內邊距邊緣位置的 Y 座標。
MouseEvent.pageX只讀-
滑鼠指標相對於整個文件的 X 座標。
MouseEvent.pageY只讀-
滑鼠指標相對於整個文件的 Y 座標。
-
事件的次要目標(如果存在)。
MouseEvent.screenX只讀-
滑鼠指標在螢幕座標中的 X 座標。
MouseEvent.screenY只讀-
滑鼠指標在螢幕座標中的 Y 座標。
MouseEvent.shiftKey只讀-
如果滑鼠事件觸發時 shift 鍵處於按下狀態,則返回
true。 MouseEvent.mozInputSource非標準 只讀-
生成事件的裝置型別(
MOZ_SOURCE_*常量之一)。這可以讓你例如判斷滑鼠事件是由實際的滑鼠還是由觸控事件生成的(這可能會影響你解釋與事件關聯的座標的準確程度)。 MouseEvent.webkitForce非標準 只讀-
點選時施加的壓力大小。
MouseEvent.x只讀-
MouseEvent.clientX的別名。 MouseEvent.y只讀-
MouseEvent.clientY的別名。
mouseleave 事件的行為

當指標離開層級中的每個元素時,會向它們傳送一個 mouseleave 事件。這裡,當指標從文字移動到此處表示的最外層 div 外部區域時,會向層級中的四個元素髮送四個事件。
mouseout 事件的行為

單個 mouseout 事件會發送到 DOM 樹中最深層的元素,然後它會沿層級冒泡,直到被處理程式取消或到達根元素。
示例
mouseout 文件包含一個示例,說明了 mouseout 和 mouseleave 之間的區別。
mouseleave
以下這個簡單的示例使用 mouseenter 事件在滑鼠進入 <div> 分配的空間時改變其邊框。然後它會向列表中新增一個專案,其中包含 mouseenter 或 mouseleave 事件的編號。
HTML
<div id="mouseTarget">
<ul id="unorderedList">
<li>No events yet!</li>
</ul>
</div>
CSS
為 <div> 設定樣式以使其更可見。
#mouseTarget {
box-sizing: border-box;
width: 15rem;
border: 1px solid #333333;
}
JavaScript
let enterEventCount = 0;
let leaveEventCount = 0;
const mouseTarget = document.getElementById("mouseTarget");
const unorderedList = document.getElementById("unorderedList");
mouseTarget.addEventListener("mouseenter", (e) => {
mouseTarget.style.border = "5px dotted orange";
enterEventCount++;
addListItem(`This is mouseenter event ${enterEventCount}.`);
});
mouseTarget.addEventListener("mouseleave", (e) => {
mouseTarget.style.border = "1px solid #333333";
leaveEventCount++;
addListItem(`This is mouseleave event ${leaveEventCount}.`);
});
function addListItem(text) {
// Create a new text node using the supplied text
const newTextNode = document.createTextNode(text);
// Create a new li element
const newListItem = document.createElement("li");
// Add the text node to the li element
newListItem.appendChild(newTextNode);
// Add the newly created list item to list
unorderedList.appendChild(newListItem);
}
結果
規範
| 規範 |
|---|
| UI 事件 # 事件型別-mouseleave |
| HTML # 處理程式-onmouseleave |
瀏覽器相容性
載入中…