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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jquery的冒泡事件jQuery事件
- jQuery 事件冒泡jQuery事件
- wx處理滑鼠事件事件
- jquery阻止事件冒泡jQuery事件
- JavaScript 事件冒泡JavaScript事件
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- JQuery6:事件冒泡jQuery事件
- jQuery如何阻止事件冒泡jQuery事件
- ncurses滑鼠事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()事件
- JavaScript事件冒泡、事件捕獲和阻止預設事件JavaScript事件
- JavaScript阻止事件冒泡JavaScript事件
- JQuery4:滑鼠事件和滾動事件jQuery事件
- JavaScript事件處理JavaScript事件
- javascript的事件監聽與捕獲和冒泡JavaScript事件
- 什麼是jquery事件冒泡jQuery事件
- 事件冒泡、事件捕獲、DOM0級事件處理程式、DOM2級事件處理程式事件
- javaScript事件(二)事件處理程式JavaScript事件
- jQuery事件冒泡程式碼例項jQuery事件
- jquery-中的滑鼠事件jQuery事件
- jQuery阻止事件冒泡和預設行為程式碼jQuery事件
- javascript阻止事件冒泡程式碼JavaScript事件
- JavaScript阻止冒泡和取消事件預設行為JavaScript事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- javascript基礎(事件的冒泡)(三十二)JavaScript事件
- 事件冒泡 和 事件捕獲事件
- jQuery阻止事件冒泡程式碼例項jQuery事件
- jQuery阻止事件冒泡簡單介紹jQuery事件
- 阻止jquery事件冒泡程式碼例項jQuery事件
- jQuery阻止事件冒泡例項程式碼jQuery事件
- JS事件(事件冒泡和事件捕獲)JS事件
- javascript事件冒泡簡單例項JavaScript事件單例
- JavaScript高階程式設計筆記 事件冒泡和事件捕獲JavaScript程式設計筆記事件
- 理解js的事件冒泡和事件捕獲JS事件
- jQuery 事件(一) 滑鼠與鍵盤事件jQuery事件
- js 事件的冒泡和委託JS事件
- JavaScript之事件處理詳解JavaScript事件
- 事件的冒泡事件
- JavaScript 阻止事件冒泡程式碼例項JavaScript事件