mouseout與mouseleave區別
通常來講,一個概念的名稱大致能夠體現它的功能。
標題中的兩個事件也是如此,從名稱來看,都是滑鼠指標從指定元素離開觸發事件。
筆者本人英語水平有限,很難從out與leave單詞含義之間的區別來闡述兩個事件之間差別。
但是,對於兩個事件之間的具體差別還是有比較清晰的瞭解,下面簡單進行一下分享。
關於兩個事件各自具體用法可以參閱如下兩篇文章:
(1).JavaScript mouseout 事件一章節。
(2).JavaScript mouseleave 事件一章節。
首先總結一下兩個事件之間的區別,後面再通過程式碼例項進行一下演示。
(1).mouseout支援事件冒泡,mouseleave不支援。
(2).事件冒泡的支援與否,又決定滑鼠從子元素移出時觸發mouseout事件,不觸發mouseleave事件。
(3).滑鼠指標從當前元素移入子元素時,觸發mouseout事件,但是不觸發mouseleave事件。
簡單總結如下:
(1).如果在A元素註冊mouseleave事件,那麼必須滑鼠指標完全移出A元素事件才會觸發。
(2).如果在A元素註冊mouseout事件,不但滑鼠指標完全移出A元素會觸發事件,滑鼠指標從A元素移入它的子元素和滑鼠指標從子元素移入A元素也會觸發事件。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:150px; height:60px; line-height:60px; text-align: center; background-color: #ccc; margin:10px } </style> <script> window.onload=function(){ let top=document.querySelector("#top"); let bottom=document.querySelector("#bottom"); top.onmouseout=function(){ this.innerHTML="螞蟻部落一"; } bottom.onmouseleave=function(){ this.innerHTML="螞蟻部落二"; } } </script> </head> <body> <div id="top"></div> <div id="bottom"></div> </body> </html>
程式碼執行效果截圖如下:
上述程式碼分別為兩個div註冊mouseout和mouseleave事件處理函式。
當滑鼠指標從各自元素離開時,會將對應的字串寫入div,此時兩者的表現完全一樣。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #top,#bottom{ width:150px; height:60px; line-height:60px; text-align: center; background-color: #ccc; margin:10px; position: relative; } #top div,#bottom div{ width:100px; height:50px; text-align:center; line-height:50px; position: relative; left:150px; color:white; background-color:blue; } </style> <script> window.onload=function(){ let top=document.querySelector("#top"); let bottom=document.querySelector("#bottom"); top.onmouseout=function(){ this.firstElementChild.innerHTML="螞蟻部落一"; } bottom.onmouseleave=function(){ this.firstElementChild.innerHTML="螞蟻部落二"; } } </script> </head> <body> <div id="top"> <div></div> </div> <div id="bottom"> <div></div> </div> </body> </html>
執行程式碼後,初始效果截圖如下:
程式碼分析如下:
(1).為了便於觀察效果,將各自子元素通過定位方式定位到父元素外邊。
(2).雖然子元素視覺上在父元素之外,但並不等於父子關係受到影響。
(3).首先看mouseout事件,當滑鼠指標從藍色子元素向左移動至top元素,事件觸發,由於此事件支援冒泡現象,滑鼠離開子元素這個事件會傳遞至父元素,所以會將"螞蟻部落一"寫入子元素中;當滑鼠指標從top父元素移動至藍色子元素的時候,事件也會觸發。
(4).再來看mouseleave事件,當滑鼠指標從藍色子元素向左移動至bottom父元素,事件處理函式不會執行,由於此事件不支援冒泡現象;當滑鼠指標從bottom父元素移動至藍色子元素的時候,事件不會觸發,只有滑鼠指標徹底移出bottom父元素,事件才會觸發。
上面對兩個事件的區別進行比較詳細的介紹,如果有任何疑問可以在文章底部進行留言反饋交流。
相關文章
- 淺談mouseenter和mouseover,mouseout和mouseleave
- JavaScript mouseout 事件JavaScript事件
- JavaScript mouseleave 事件JavaScript事件
- ??與?:的區別
- mouseenter與mouseover區別
- currentTarget與target區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- match()與exec()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別
- <section>與<article> 區別
- onmouseover與onmouseenter區別
- offset與style區別
- cellpadding與cellspacing 區別padding
- animation與transition 區別
- encodeURI與encodeURIComponent區別
- JavaScript與ECMAScript 區別JavaScript
- FragmentPagerAdapter與FragmentStatePagerAdapter區別FragmentAPT
- put與putIfAbsent區別
- JavaScript 與TypeScript區別JavaScriptTypeScript
- WPF Button MouseEnter and MouseLeave together play as MouseOver
- __weak與__block區別,深層理解兩者區別BloC
- 值型別與引用型別的區別型別
- 耦合與聚合的區別比單體與微服務區別更重要微服務
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- preventDefault()與return false區別False
- const與static的區別
- HTTP 與 HTTPS 的區別HTTP
- getAttribute() 與 attr() 的區別
- input與change事件區別事件
- @import與<link> 的區別Import