首頁 >web前端 >js教程 >jQuery嵌套元素的mouseover和mouseout事件詳解

jQuery嵌套元素的mouseover和mouseout事件詳解

黄舟
黄舟原創
2017-06-28 13:56:581472瀏覽

今天在幫別人解決一個關於mouseover和mouseout問題的時候發現了一個原來沒想到的問題,鬥膽share下,高手莫噴。 。 

問題:有巢狀的三層div。 div111最外層,div222中間層,div333最內層。 
效果:當滑鼠位於div的上方時,對應層的mouseover觸發,當屬性從div的上方離開時,對應層的mouseout觸發。 (例如:當滑鼠從div111移動到子元素div222,div333時,不會觸發div111的mouseleave事件,反過來當從子元素div222,div333到div111時,不會觸發div111的mouseenter事件, 

此段程式碼同時也解決了mouseover和mouseout因為子元素的冒泡而產生的一些問題。

#一個叫做mouseenter 


一個叫做mouseleave 

mouseenter和mouseleave這兩東西完全做不到這種效果好吧。
#切,我還以為是什麼大問題,直接綁定一次事件就可以,使用e.target就可以進行判斷具體發生在哪個元素上,根據元素來處理更節省資源。 #   mouseover/out是冒泡的,所以自然會引起這問題

IE下用mouseenter/leave

其他瀏覽器下用addEventListener註冊的時候第3個參數傳true就行

IE的mouseenter/leave,當滑鼠從div111移動到div222的時候,會觸發div111的mouseleave和div222的mouseenter,反過來從div222到div111的時候,會觸發div222的mouseleave和div111的mouseenter,完全就不符合要求,他們只適合沒有巢狀的應用。要解決這個問題才產生的。

<!DOCTYPE html>        
<html>        
    <head>        
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        
        <title>test</title>        
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>        
        <style>        
            #div111{        
                width:200px; height :200px ; background :red; margin :100px auto auto 100px; border: 2px solid white;   
            }        
            #div222{        
                width:100px; height :100px; background :yellow; border: 2px solid white; 
            }        
            #div333{        
                width:50px; height :50px; background :blue; border: 2px solid white; 
            }
        </style>        
    </head>        
    <body>        
        <div id="div111">         
            <div id="div222">         
                <div id="div333"></div>         
            </div>         
        </div>    
        <div id="log"></div>         
        <script type ="text/javascript" >         
            function mouse_over(event){    
                var elem = $(event.currentTarget),  
                    fromElem = $(event.relatedTarget);  
                if(elem.has(fromElem).length === 0 || !fromElem.is(elem)){
                	elem.css(&#39;border-color&#39;, &#39;green&#39;);
                    log(elem.attr(&#39;id&#39;), event.type);
                }  
            };      
            function mouse_out(event){    
                var elem = $(event.currentTarget),  
                    toElem = $(event.relatedTarget);
                if(elem.has(toElem).length === 0 || !toElem.is(elem)){
                	elem.css(&#39;border-color&#39;, &#39;white&#39;);
                    log(elem.attr(&#39;id&#39;), event.type);
                }  
            };
            function log(id, type){
            	$("#log").append("<div><span>" + id + "触发了<strong><font color=&#39;red&#39;>" + type + "</font></strong>事件</span></div>");  
            }
            $(&#39;#div111&#39;).mouseover(mouse_over);      
            $(&#39;#div222&#39;).mouseover(mouse_over);      
            $(&#39;#div333&#39;).mouseover(mouse_over);      
            $(&#39;#div111&#39;).mouseout(mouse_out);      
            $(&#39;#div222&#39;).mouseout(mouse_out);      
            $(&#39;#div333&#39;).mouseout(mouse_out);  
        </script>         
    </body>        
</html>

$().mouseenter(function(){  
    //do something  
});

沒區別

以上是jQuery嵌套元素的mouseover和mouseout事件詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn