mouseover:當鼠標移入元素或其子元素都會觸發事件,所以有一個重復觸發,冒泡過程。對應的移除事件是mouseout
mouseenter:當鼠標移除元素本身(不包含元素的子元素)會觸發事件,也就是不會冒泡,對應的移除事件是mouseleave
mouseover和mouseenter的異同體現在兩個方面:
1. 是否支持冒泡
2.事件的觸發時機
先看一張圖,對這兩件事有一個簡單直觀的感受。
mouseenter事件的情況:
當鼠標從元素的邊界之外移入元素的邊界之內時,事件被觸發。而鼠標本身在元素邊界內時,要觸發該事件,必須先將鼠標移出元素邊界外,再次移入才能觸發。
也就是說:mouseover支持事件冒泡,而mouseenter不支持事件冒泡
由於mouseenter不支持事件冒泡,導致在一個元素的子元素上進入或離開的時候會觸發其mouseover和mouseout事件,但不會觸發mouseenter和mouseleave事件。
如何模擬mouseenter事件
可見mouseover事件因其具有冒泡的性質,在子元素內移動的時候,頻繁被觸發,如果我們不希望如此,可以使用mouseenter事件代替之,但是早期只有ie瀏覽器支持該事件,雖然現在大多數高級瀏覽器都支持了mouseenter事件,但是難免會有些兼容問題,所以如果可以自己手動模擬,那就太好了。
參考鏈接:https://juejin.im/post/5935773fa0bb9f0058edbd61