`
axiheyhey
  • 浏览: 5195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

嵌套元素的mouseover和mouseout事件

阅读更多
今天在帮别人解决一个关于mouseover和mouseout问题的时候发现了一个原来没想到的问题,斗胆share下,高手莫喷。。

问题:有嵌套的三层div。div111最外层,div222中间层,div333最内层。
效果:当鼠标位于div的上方时,相应层的mouseover触发,当属性从div的上方离开时,相应层的mouseout触发。

此段代码同时也解决了mouseover和mouseout由于子元素的冒泡而产生的一些问题。不知道有没更好的方案?

<!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('border-color', 'green');
                    log(elem.attr('id'), event.type);
                }  
            };      
            function mouse_out(event){    
                var elem = $(event.currentTarget),  
                    toElem = $(event.relatedTarget);
                if(elem.has(toElem).length === 0 || !toElem.is(elem)){
                	elem.css('border-color', 'white');
                    log(elem.attr('id'), event.type);
                }  
            };
            function log(id, type){
            	$("#log").append("<div><span>" + id + "触发了<strong><font color='red'>" + type + "</font></strong>事件</span></div>");  
            }
            $('#div111').mouseover(mouse_over);      
            $('#div222').mouseover(mouse_over);      
            $('#div333').mouseover(mouse_over);      
            $('#div111').mouseout(mouse_out);      
            $('#div222').mouseout(mouse_out);      
            $('#div333').mouseout(mouse_out);  
        </script>         
    </body>        
</html>
0
0
分享到:
评论

相关推荐

    经过绑定元素时会多次触发mouseover和mouseout事件

    总结来说,当面临因嵌套元素导致的 `mouseover` 和 `mouseout` 事件频繁触发的问题时,可以考虑使用jQuery的 `mouseenter` 和 `mouseleave` 或 `hover()` 方法来优化代码,提高用户体验。同时,为了确保在边界情况下...

    jQuery中hover与mouseover和mouseout的区别分析

    举个例子,当一个父元素内嵌套有多个子元素时,鼠标在子元素间移动会引发多次mouseover和mouseout事件,这在多数情况下并不是我们期望的。而hover事件因为使用了mouseenter和mouseleave,所以在这种场景下能更精确地...

    鼠标经过子元素触发mouseout,mouseover事件的解决方案

    标题提到的问题是,当鼠标经过子元素时,意外触发了父元素的`mouseout`和`mouseover`事件,从而影响了预期的效果。下面将详细讨论这个问题以及解决方案。 首先,我们需要了解`mouseover`和`mouseout`事件的工作原理...

    关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

    `mouseover`, `mouseout`, `mouseenter`, 和 `mouseleave` 是四个常见的鼠标事件,它们都与鼠标的移动有关,但触发条件有所不同。理解这些事件的区别对于编写无闪烁、响应良好的用户界面至关重要。 1. `mouseover` ...

    JavaScript和JQuery的鼠标mouse事件冒泡处理

    简单的鼠标移动事件: 进入 代码如下: mouseenter:不冒泡 mouseover: 冒泡 不论鼠标指针穿过被选元素或其子元素,都会...给一个嵌套的层级绑定mouseout事件,会发现mouseout事件与想象的不一样 代码如下: &lt;!DOC

    为非IE浏览器添加mouseenter,mouseleave事件的实现代码

    先了解几个事件对象属性target 指事件源对象,点击嵌套元素最里层的某元素,该元素...relativeTarget 指事件相关的元素,一般用在mouseover,mouseout事件中。IE6/7/8中对应的是fromElement,toElement。mouseenter ,m

    JavaScript实现鼠标滑过高亮显示纵向3级白色的导航菜单源码

    3. **JavaScript事件监听**:使用JavaScript的addEventListener方法,监听每个菜单项的mouseover和mouseout事件。当鼠标进入某个菜单项时,触发mouseover事件,高亮该菜单项;当鼠标离开时,触发mouseout事件,恢复...

    jquery hover顶部导航菜单系统软件管理模板导航栏菜单

    在jQuery中,hover()是一个组合函数,它同时处理mouseover和mouseout事件。当你将鼠标悬停在某个元素上时,会触发mouseover事件;当鼠标离开该元素时,会触发mouseout事件。hover()函数接受两个函数参数,第一个函数...

    关于Jquery的鼠标悬停事件

    这两个事件与原生JavaScript中的`mouseover`和`mouseout`有所不同,它们不会因为元素内部子元素的鼠标移动而触发。`mouseenter` 在鼠标进入元素边界时触发,而 `mouseleave` 在鼠标离开元素边界时触发。这对于处理...

    jquery嵌套下拉效果.zip

    同时,`mouseenter`和`mouseleave`事件相比传统的`mouseover`和`mouseout`更适合处理子元素嵌套的情况,可以避免因鼠标移入子菜单导致的意外关闭。 总结来说,这个压缩包中的示例展示了如何使用HTML5、CSS和jQuery...

    JS 二级下拉菜单。很漂亮,就是没实现三级下拉

    例如,通过监听`mouseover`和`mouseout`事件,我们可以实现二级菜单的展开和收起。 下面是一个简单的二级下拉菜单的JS和CSS实现步骤: 1. **HTML 结构**: 创建一个包含一级菜单项的`&lt;ul&gt;`,每个菜单项内嵌套另一...

    锋利的jquery第四章例子

    这里的`click`可以替换为其他类型的事件,如`mouseover`、`mouseout`、`keydown`等。`function()`内部定义了当事件触发时执行的代码。这个方法允许我们为单个或多个元素绑定一个或多个事件。 2. **事件冒泡(Event ...

    很好用的JS左侧导航菜单,滑过显示,移开隐藏

    4. **JavaScript事件处理**:在`js`文件中,会定义事件监听器,如`mouseover`和`mouseout`事件。当鼠标进入(`mouseover`)菜单项时,显示对应的子菜单;当鼠标离开(`mouseout`)时,隐藏子菜单。这可以通过修改子...

    javascript 兼容FF的onmouseenter和onmouseleave的代码

    `mouseover`和`mouseout`事件就是这样一种会冒泡的事件,这可能在某些场景下导致问题,例如元素内部嵌套其他元素时,可能会在鼠标移动过程中无意触发外层元素的事件。 为了解决Firefox中`onmouseenter`和`...

    JavaScript实现鼠标滑过纵向3级深色导航菜单源码

    `mouseover`事件在鼠标进入某个元素时触发,而`mouseout`事件在鼠标离开时触发。通过绑定这些事件,我们可以控制菜单的展开和收起。具体实现可能包括以下步骤: 1. 首先,我们需要获取所有菜单项,可以通过类选择器...

    jQuery集团公司网站导航菜单.zip

    这可以通过绑定`mouseover`和`mouseout`事件来实现。`mouseover`事件会在鼠标指针进入某个元素时触发,而`mouseout`则在鼠标离开时触发。我们可以使用`.hover()`方法来同时设置这两个事件,例如: ```javascript $...

    jQuery实现单击和鼠标感应事件

    而鼠标感应事件,主要是指鼠标指针移动到元素上方时(mouseover事件)和鼠标指针离开元素时(mouseout事件)。通过这些事件,我们可以感知鼠标的位置变化并作出相应的反馈。jQuery中的`.hover()`方法就是一个结合了...

Global site tag (gtag.js) - Google Analytics