【问题标题】:Prevent child element hovering from breaking parent hover防止子元素悬停打破父悬停
【发布时间】:2015-02-27 18:44:08
【问题描述】:

假设我有一个父 div 元素,它有一个 img 子元素,并且我想在父元素悬停时执行一些代码。

<div class="parent">
    <img src="link_to_some_image" />
</div>

这里的问题是,当子 img 悬停时,父“悬停状态”会中断。即使子元素悬停,如何使父元素保持悬停状态?

这是一个示例 jsfiddle,尝试将鼠标悬停在空白处,然后悬停在图像上 http://jsfiddle.net/omrf0dxe/

非常感谢!

编辑:img 子元素是一个例子,它可能是其他类型的元素以及 div、链接等

Edit2:好的,显然解决方案是在绑定“退出”事件时使用 mouseleave 而不是 mouseout。

【问题讨论】:

    标签: javascript jquery html hover


    【解决方案1】:

    您正在收听事件mouseenter/mouseout

    你想要mouseenter/mouseleave的事件:

    Example Here

    $(".parent").on("mouseenter mouseleave", function () {
       $(this).toggleClass('hovered'); 
    });
    

    作为替代方案,您还可以将 pointer-events: none 添加到子 img 元素中,以便从元素中删除鼠标事件:

    Updated Example

    .parent > img {
        pointer-events: none;
    }
    

    不过,根据您要实现的目标,您甚至可能不需要 JS。

    只需使用:hover 伪类。

    Example Here

    .parent {
        width:400px;
        height:400px;
        background:blue;
    }
    
    .parent:hover {
        background:red;
    }
    

    【讨论】:

    • 事情是我并不总是知道孩子是否会成为一个图像,或者像 div、图像等多个元素。这个解决方案是否有一个通用的方法,不是儿童类型特定的?
    • 解决方案很简单,我不得不使用 mouseleave 而不是 mouseout。但是,我不知道指针事件的用法,所以非常感谢您的帮助:)
    【解决方案2】:

    相当基本的解决方案,不确定您是否希望您的解决方案保持切换状态,但我会使用添加/删除类来攻击它。

    $('.parent').hover(
           function(){ $(this).addClass('hovered') },
           function(){ $(this).removeClass('hovered') }
    )
    

    http://jsfiddle.net/omrf0dxe/7/

    【讨论】:

    • 这很奇怪,为什么这有效而我的无效,所以我注意到我使用的是 mouseout 而不是 mouseleave,这是错误。谢谢!
    • 没问题的人,刚刚测试了你的鼠标离开理论并且那个也有效,所以你现在有两个解决方案:)
    猜你喜欢
    • 2019-05-23
    • 2018-05-03
    • 1970-01-01
    • 2013-05-16
    • 2013-01-08
    • 1970-01-01
    • 2013-12-07
    • 2011-10-10
    相关资源
    最近更新 更多