JavaScript和JQuery的滑鼠mouse事件冒泡處理
這篇文章主要介紹了JavaScript和JQuery的 滑鼠mouse事件冒泡處理,本文總結出了mouse事件的一些定論,並分別給出了JavaScript和JQuery測試程式碼,需要的朋友可以參考下
簡單的滑鼠移動事件:
進入
程式碼如下:
mouseenter:不冒泡
mouseover: 冒泡
不論滑鼠指標穿過被選元素或其子元素,都會觸發 mouseover 事件
只有在滑鼠指標穿過被選元素時,才會觸發 mouseenter 事件
移出
程式碼如下:
mouseleave: 不冒泡
mouseout:冒泡
不論滑鼠指標離開被選元素還是任何子元素,都會觸發 mouseout 事件
只有在滑鼠指標離開被選元素時,才會觸發 mouseleave 事件
我們透過一個案例觀察下問題:
給一個巢狀的層級繫結mouseout事件,會發現mouseout事件與想象的不一樣
程式碼如下:
外部子元素
內部子元素
0
0
我們發現一個問題mouseout事件:
1.無法阻止冒泡
2.在內部的子元素上也會觸發
同樣的問題還有mouseover事件,那麼在stopPropagation方法失效的情況下我們要如何停止冒泡呢?
1.為了阻止mouseover和mouseout的反覆觸發,這裡要用到event物件的一個屬性relatedTarget,這個屬性就是用來判斷 mouseover和mouseout事件目標節點的相關節點的屬性。簡單的來說就是當觸發mouseover事件時,relatedTarget屬性代表的就是滑鼠剛剛離開的那個節點,當觸發mouseout事件時它代表的是滑鼠移向的那個物件。由於MSIE不支援這個屬性,不過它有代替的屬性,分別是 fromElement 和toElement。
2.有了這個屬性,我們就能夠清楚的知道我們的滑鼠是從哪個物件移過來,又是要移動到哪裡去了。這樣我們就能夠透過判斷這個相關聯的物件是否在我們要觸發事件的物件的內部,或者是不是就是這個物件本身。透過這個判斷我們就能夠合理的選擇是否真的要觸發事件。
3.這裡我們還用到了一個用於檢查一個物件是否包含在另外一個物件中的方法,contains方法。MSIE和FireFox分別提供了檢查的方法,這裡封裝了一個函式。
jQuery的處理也是如出一轍
複製程式碼 程式碼如下:
jQuery.each({
mouseenter: "mouseover",
mouseleave: "mouseout",
pointerenter: "pointerover",
pointerleave: "pointerout"
}, function(orig, fix) {
jQuery.event.special[orig] = {
delegateType: fix,
bindType: fix,
handle: function(event) {
var ret,
target = this,
related = event.relatedTarget,
handleObj = event.handleObj;
// For mousenter/leave call the handler if related is outside the target.
// NB: No relatedTarget if the mouse left/entered the browser window
if (!related || (related !== target && !jQuery.contains(target, related))) {
event.type = handleObj.origType;
ret = handleObj.handler.apply(this, arguments);
event.type = fix;
}
return ret;
}
};
});
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993754/viewspace-2753761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript 事件冒泡JavaScript事件
- JQuery6:事件冒泡jQuery事件
- JavaScript阻止事件冒泡JavaScript事件
- JQuery4:滑鼠事件和滾動事件jQuery事件
- JavaScript事件處理JavaScript事件
- ncurses滑鼠事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- 理解js的事件冒泡和事件捕獲JS事件
- 透過滑鼠事件獲取滑鼠位置在3d中的座標mouse/Raycaster事件3DAST
- 事件的冒泡事件
- JavaScript 阻止事件冒泡程式碼例項JavaScript事件
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- 1.21 JQuery4:滑鼠事件與滾動事件jQuery事件
- JavaScript 註冊事件處理函式JavaScript事件函式
- 關於js事件冒泡和事件捕獲JS事件
- 事件分發和處理事件
- W3C的事件處理和IE的事件處理有哪些區別?事件
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- JavaScript滑鼠中鍵滾動事件JavaScript事件
- 前端學習程式碼例項-JavaScript阻止事件冒泡前端JavaScript事件
- 事件處理事件
- Javascript滑鼠滾輪事件相容寫法JavaScript事件
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- stopPropagation() 阻止事件冒泡事件
- freeswitch的event事件處理事件
- React事件處理React事件
- vue事件處理Vue事件
- JavaSwing 事件處理Java事件
- Flutter | 事件處理Flutter事件
- 事件的捕獲、冒泡、委託事件
- jQuery - jQuery $(document).ready() 和 JavaScript [removed]() 的比較jQueryJavaScriptREM
- javascript–BOM的onload事件和onunload事件JavaScript事件
- jQuery 篩選&文件處理jQuery
- JS中的事件順序(事件捕獲與冒泡)JS事件
- redis的事件處理機制Redis事件
- 介紹下VNPY的Event事件處理,和建立新事件型別事件型別
- angular 的滑鼠事件Angular事件
- ViewGroup事件分發和處理原始碼分析View事件原始碼