亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript和JQuery的鼠標mouse事件冒泡處理

 更新時間:2015年06月19日 09:12:59   投稿:junjie  
這篇文章主要介紹了JavaScript和JQuery的鼠標mouse事件冒泡處理,本文總結出了mouse事件的一些定論,并分別給出了JavaScript和JQuery測試代碼,需要的朋友可以參考下

簡單的鼠標移動事件:

進入

復制代碼 代碼如下:

mouseenter:不冒泡
mouseover: 冒泡

不論鼠標指針穿過被選元素或其子元素,都會觸發(fā) mouseover 事件
只有在鼠標指針穿過被選元素時,才會觸發(fā) mouseenter 事件

移出

復制代碼 代碼如下:

mouseleave: 不冒泡
mouseout:冒泡

不論鼠標指針離開被選元素還是任何子元素,都會觸發(fā) mouseout 事件
只有在鼠標指針離開被選元素時,才會觸發(fā) mouseleave 事件

我們通過一個案例觀察下問題:

給一個嵌套的層級綁定mouseout事件,會發(fā)現mouseout事件與想象的不一樣

復制代碼 代碼如下:

<!DOCTYPE html><div class="out overout" style="width:40%;height:120px; margin:0 15px;background-color:#D6EDFC;float:left;" data-mce-style="width: 40%; height: 120px; margin: 0 15px; background-color: #d6edfc; float: left;"><p style="border:1px solid red" data-mce-style="border: 1px solid red;">外部子元素</p><div class="in overout" style="width:60%;background-color:#FFCC00;margin:10px auto;" data-mce-style="width: 60%; background-color: #ffcc00; margin: 10px auto;"><p style="border:1px solid red" data-mce-style="border: 1px solid red;">內部子元素</p><p id="inshow">0</p>
    </div><p id="outshow">0</p>
</div><script type="text/javascript">

    var i = 0;
    var k = 0;

    document.querySelectorAll('.out')[0].addEventListener('mouseout',function(e){
        document.querySelectorAll("#inshow")[0].textContent = (++i)
       e.stopPropagation();
    },false)

   document.querySelectorAll('.in')[0].addEventListener('mouseout',function(){
       document.querySelectorAll("#outshow")[0].textContent = (++k)
    },false)

</script>

我們發(fā)現一個問題mouseout事件:

1.無法阻止冒泡
2.在內部的子元素上也會觸發(fā)

同樣的問題還有mouseover事件,那么在stopPropagation方法失效的情況下我們要如何停止冒泡呢?

1.為了阻止mouseover和mouseout的反復觸發(fā),這里要用到event對象的一個屬性relatedTarget,這個屬性就是用來判斷 mouseover和mouseout事件目標節(jié)點的相關節(jié)點的屬性。簡單的來說就是當觸發(fā)mouseover事件時,relatedTarget屬性代表的就是鼠標剛剛離開的那個節(jié)點,當觸發(fā)mouseout事件時它代表的是鼠標移向的那個對象。由于MSIE不支持這個屬性,不過它有代替的屬性,分別是 fromElement和toElement。
2.有了這個屬性,我們就能夠清楚的知道我們的鼠標是從哪個對象移過來,又是要移動到哪里去了。這樣我們就能夠通過判斷這個相關聯的對象是否在我們要觸發(fā)事件的對象的內部,或者是不是就是這個對象本身。通過這個判斷我們就能夠合理的選擇是否真的要觸發(fā)事件。
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;
            }
        };
    });

相關文章

  • JavaScript轉換與解析JSON方法實例詳解

    JavaScript轉換與解析JSON方法實例詳解

    這篇文章主要介紹了JavaScript轉換與解析JSON方法,實例分析了JavaScript解析json的技巧,并附帶分析了jQuery解析與轉換json的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • JavaScript中Object基礎內部方法圖

    JavaScript中Object基礎內部方法圖

    本篇文章通過一張詳細的JavaScript中Object基礎內部方法圖介紹了其基本用法,需要的朋友參考下。
    2018-02-02
  • Angular組件拿不到@Input輸入屬性問題探究解決方法

    Angular組件拿不到@Input輸入屬性問題探究解決方法

    最近在工作中實現一個feature的時候,碰到一個小問題:Angular組件拿不到@Input輸入屬性的問題,盡管對這些問題都比較了解,但是找問題是需要一個過程的,所以還是把這個問題總結記錄了下
    2023-01-01
  • 詳細解析let和const命令

    詳細解析let和const命令

    這篇文章主要介紹了詳細解析let和const命令,let和const是es6中新增的命令,一般let用來聲明變量而const則用來聲明常量,更多相關內容感興趣的小伙伴可以參考一下
    2022-06-06
  • JsonProperty 的使用方法詳解

    JsonProperty 的使用方法詳解

    這篇文章主要介紹了JsonProperty 的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 詳解Webwork中Action 調用的方法

    詳解Webwork中Action 調用的方法

    這篇文章主要介紹了詳解Webwork中Action 調用的方法的相關資料,需要的朋友可以參考下
    2016-02-02
  • js實現tab欄切換制作

    js實現tab欄切換制作

    這篇文章主要為大家詳細介紹了js實現tab欄切換制作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript實現的聯動菜單特效示例

    JavaScript實現的聯動菜單特效示例

    這篇文章主要介紹了JavaScript實現的聯動菜單特效,涉及javascript事件響應及頁面元素屬性動態(tài)操作相關實現技巧,需要的朋友可以參考下
    2019-07-07
  • javascript 24點游戲代碼

    javascript 24點游戲代碼

    非常不錯的技術24點的游戲代碼,他的算法值得學習,希望喜歡游戲的朋友,可以來看看
    2008-06-06
  • JavaScript變量提升和嚴格模式實例分析

    JavaScript變量提升和嚴格模式實例分析

    這篇文章主要介紹了JavaScript變量提升和嚴格模式,結合實例形式分析了javascript變量提升和嚴格模式的原理及相關操作注意事項,需要的朋友可以參考下
    2019-01-01

最新評論