mouseenter與mouseover區別
程式設計中有很多概念比較類似,甚至在某些場景下功能完全一樣。
當然兩者是有區別的,否則就沒有同時存在的必要,這些區別也決定了它們各自應用場景。
標題中兩事件就如上面闡述那樣,某些場景下功能完全相同,但區別也很明顯。
下面通過程式碼例項介紹一下兩者的共同點和區別,希望能夠給需要的朋友帶來一些朋友。
一.兩個事件的共同點:
從名稱來看,兩個事件都達到了同一個目的,那就是滑鼠指標進入指定元素之內。
僅從上面這個單純的角度來看,兩個事件的表現可以說完全一樣,看如下程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:200px; height:60px; text-align: center; line-height: 60px; background-color:#ccc; margin:5px; } </style> <script> window.onload=function(){ let enter=document.getElementById("enter"); let over=document.getElementById("over"); enter.onmouseenter=function(){ this.innerHTML="螞蟻部落一"; } over.onmouseover=function(){ this.innerHTML="螞蟻部落二"; } } </script> </head> <body> <div id="enter"></div> <div id="over"></div> </body> </html>
程式碼執行效果截圖如下:
上述程式碼分別為兩個div註冊各自事件的事件處理函式,兩個事件的表現可以說完全一樣。
滑鼠指標移入兩個div各自事件會觸發,然後將指定的字串寫入div中。
上面兩個事件的表現正是讓人迷惑的地方,再通過程式碼例項解決兩者的區別。
二.兩個事件的區別:
兩個事件的最重要的區別是,mouseenter不支援事件冒泡,mouseover支援事件冒泡。
關於事件冒泡現象可以參閱JavaScript 事件冒泡一章節。
也是由於這個區別,會在實際應用中導致一些不同的現象,也決定了兩者應用場景的不同。
下面通過程式碼例項演示一下由於是否支援事件冒泡導致一些區別。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #enter,#over{ width:250px; height:120px; background-color:#ccc; margin:10px; overflow:hidden; } #enterinner,#overinner{ width:100px; height:50px; text-align:center; line-height:50px; color:red; margin:50px; background-color:green; } </style> <script> window.onload=function(){ let enter=document.getElementById("enter"); let enterInner=document.getElementById("enterinner"); let enterCount=0; let over=document.getElementById("over"); let overInner=document.getElementById("overinner"); let overCount=0; enter.onmouseenter=function(){ enterCount=enterCount+1; enterInner.innerHTML=enterCount; } over.onmouseover=function(){ overCount=overCount+1; overInner.innerHTML=overCount; } } </script> </head> <body> <div id="enter"> <div id="enterinner"></div> </div> <div id="over"> <div id="overinner"></div> </div> </body> </html>
上述程式碼可以很好的演示由於是否具有事件冒泡導致的一些差別。
下面介紹一下如何通過上述程式碼來演示兩者之間的區別。
(1).為enter元素註冊mouseenter事件處理函式,當滑鼠移入enter元素的時候,事件觸發。
(2).於是enterCount數字加1,這個沒有任何異議,不過下面要注意了。
(3).當滑鼠指標移入它的子元素的時候,子元素的mouseenter事件觸發,但是由於此事件並不具有冒泡效果,所以不會傳播到父元素,於是enterCount不會再增加。
(4).當滑鼠指標從子元素再次移入父元素的時候,事件不再觸發。
(5).再來看mouseover事件,當滑鼠移入over元素,此事件會觸發,並且數字加1,毫無異議。
(6).現在滑鼠移入它的子元素,數字在原來基礎還會加1,這是因為此事件具有冒泡現象,事件傳播到over元素,於是又一次執行事件處理函式,下面的這一點要特別注意。
(7).當滑鼠從子元素中移出到父元素的時候,數字也會在原來基礎上加1,這一點與mouseenter事件不同。
總結如下:
(1).當滑鼠指標從元素邊界之外移入的時候才會觸發mouseenter事件。
(2).滑鼠指標移入無論是從編輯外移入還是從子元素移入都會觸發mouseover事件。
清晰了兩個事件的區別之後,就可以根據當前的實際需求,選擇更為恰當的事件,比如,當我們僅僅是處理父元素相關事物,可以考慮mouseenter事件,因為它沒有事件冒泡等因素的影響。如果父元素的子元素較多,需要針對滑鼠移入每一個子元素進行的事件進行處理,如果對每一個子元素註冊事件處理函式,那實在太麻煩了,這時候推薦使用mouseover事件,利用其冒泡原理,將事件註冊在父元素上。
相關文章
- 區別mouseover與mouseenter?
- jQuery中hover與mouseover與mouseenter的區別jQuery
- 【JavaScript】offset、client、scroll、mouseover和mouseenter區別JavaScriptclient
- WPF Button MouseEnter and MouseLeave together play as MouseOver
- 淺談mouseenter和mouseover,mouseout和mouseleave
- JavaScript mouseenter 事件JavaScript事件
- JavaScript mouseover 事件JavaScript事件
- jQuery mouseover事件jQuery事件
- jQuery mouseenter事件jQuery事件
- &與&&, |與||區別
- ??與?:的區別
- <section>與<article> 區別
- showModal()與show() 區別
- localStorage與sessionStorage 區別Session
- GET與POST區別
- put與putIfAbsent區別
- JavaScript 與TypeScript區別JavaScriptTypeScript
- animation與transition 區別
- classList與className區別
- NIO與IO區別
- match()與exec()區別
- JavaScript與ECMAScript 區別JavaScript
- currentTarget與target區別
- offset與style區別
- onmouseover與onmouseenter區別
- 運算子與= 區別
- MySQL的@與@@區別MySql
- prop()與attr()區別
- #include與#include區別
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- exp與expdp區別
- WebViewClient與WebChromeClient 區別WebViewclientChrome
- expimp與expdpimpdp區別
- in與exist , not in與not exist 的區別
- __weak與__block區別,深層理解兩者區別BloC
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別