当元素被覆盖时取消 mouseout 事件

Posted

技术标签:

【中文标题】当元素被覆盖时取消 mouseout 事件【英文标题】:cancelling mouseout event when element is overlaid 【发布时间】:2011-09-14 03:32:23 【问题描述】:

希望这个 JSFiddle 比我的话更能说明问题:

http://jsfiddle.net/pmwRc/6/

当地图悬停时,我在图像地图上显示绝对定位的 H4 作为标签。但是,当鼠标指针移到 H4 上时,图像映射会触发 mouseout,这会导致 H4 再次隐藏。

如何防止这种情况发生?我希望当鼠标在图像地图上时标签可见,无论它是否也在标签上。

【问题讨论】:

【参考方案1】:

您可以使用放置在图像顶部的透明图像/图层(使用您的地图)“作弊”。

http://jsfiddle.net/GRPQa/7/

它使用图像地图坐标工作。

【讨论】:

这似乎是最合适的解决方案。谢谢:)【参考方案2】:

我知道这不完全一样,但我已经修改了你的小提琴并得到了一个可行的替代方案,只是没有图像映射;)(悬停在“G”和第一个“o”中间)

http://jsfiddle.net/pmwRc/31/

如果需要,您可以使用 style 属性在纯标记中定义坐标:

http://jsfiddle.net/pmwRc/33/

【讨论】:

这是一种更好的方法,干杯。麻烦的是,它依赖于标签 h4 在目标悬停区域上;我应该提到的事情并非总是如此。有时标签在悬停区域旁边,有时几个悬停区域被“分组” - 悬停一个应该在该组中的所有区域上显示标签。但是感谢您的帮助:)【参考方案3】:
function doSomething(e) 
    if (!e) var e = window.event;
    var tg = (window.event) ? e.srcElement : e.target;
    if (tg.nodeName != 'DIV') return;
    var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
    while (reltg != tg && reltg.nodeName != 'BODY')
        reltg= reltg.parentNode
    if (reltg== tg) return;
    // Mouseout took place when mouse actually left layer
    // Handle event

见http://www.quirksmode.org/js/events_mouse.html

【讨论】:

以上是关于当元素被覆盖时取消 mouseout 事件的主要内容,如果未能解决你的问题,请参考以下文章

鼠标mouse事件

mouseovermouseout,mouseentermouseleave区别

几个mouse事件的特点

mouseover 与 mouseout 使用时闪烁问题

鼠标事件

jquery鼠标移入移出