在具有相同类的一组 div 中悬停在单个 div 上时显示覆盖

Posted

技术标签:

【中文标题】在具有相同类的一组 div 中悬停在单个 div 上时显示覆盖【英文标题】:Show overlay on hover over single div in set of divs with same class 【发布时间】:2014-07-19 16:52:18 【问题描述】:

假设我有 4 个动态生成的 div,每个都有相同的类和唯一的编号 id,就像这样。每个都包含一个绝对定位的 div,其宽度和高度为 100%,因此当显示时,它会填满整个 div。

<div class="my_class" id="1">
    <div class="overlay"></div>
</div>

<div class="my_class" id="2">
    <div class="overlay"></div>
</div>

<div class="my_class" id="3">
    <div class="overlay"></div>
</div>

<div class="my_class" id="4">
    <div class="overlay"></div>
</div>



<style>
    .overlay 
        display:none;
    
</style>

当我将鼠标悬停在其中一个 div 上时,我希望该 div 和其他任何 div 都不显示覆盖,然后当我停止悬停时,覆盖 div 应该消失。关于如何使用 jquery 执行此操作的任何想法?这是我尝试过的。

$('document').ready(function()
  $('.my_class').mouseenter(function()
    var id = $(this).attr("id");
    $("#"+ id +" div").fadeTo("fast", 1);
    $("#"+ id +" div").mouseleave(function()
      $("#"+ id +" div").fadeTo("fast", 0);          
    );
  );
);

【问题讨论】:

【参考方案1】:

我把它改写成这样的:

$('document').ready(function()
 $('.my_class').mouseenter(function()$(this).fadeTo("fast", 1););
 $('.my_class').mouseleave(function()$(this).fadeTo("fast", 0););
);

您将mouseleave 附加到mouseenter 中,我猜您不会那样做。

【讨论】:

【参考方案2】:

mouseenter 回调中,只需使用 $(this).find 即可仅查找其中的 div。

mouseenter 回调中添加mouseleave 回调是个坏主意。每次鼠标进入父 div 时都会添加一个新的回调。

这是你想要做的吗?

http://jsfiddle.net/2R3Yt/

$('document').ready(function () 
    $('.my_class').mouseenter(function () 
        var id = $(this).attr("id");
        $(this).find("div").fadeTo("fast", 1);
    );

    $('.my_class').mouseleave(function () 
        $(this).find("div").fadeTo("fast", 0);
    );
);

【讨论】:

【参考方案3】:

我认为这个解决方案可能会更简洁一些。还有一个fiddle。

$('.my_class').mouseenter(function() 
    $(this).children('.overlay').fadeTo(1000, 0);
)

$('.my_class').mouseleave(function() 
    $(this).children('.overlay').fadeTo(1000, 1);
)

【讨论】:

【参考方案4】:

但是,原始代码对我有用;如果您在divs 之间不规则地移动光标,则事件会不断淡入和淡出叠加层。

为了解决这个问题,我将原来的 mouseentermouseleave 事件替换为 one,这与 on 类似,但只捕获一次事件。

$('.my_class').one('mouseenter', function() ...);
$('.my_class').one('mouseleave', function() ...);

然后我将mouseenter 事件放在mouseleave 中,这样我们就可以在离开活动div 后继续执行hover 效果。

http://jsfiddle.net/q8qFy/4/

如果您有兴趣CSS 唯一的解决方案:

http://jsfiddle.net/EsVLC/1/

【讨论】:

我应该补充一下,我的代码确实有效,但是在快速移动鼠标时出现故障。

以上是关于在具有相同类的一组 div 中悬停在单个 div 上时显示覆盖的主要内容,如果未能解决你的问题,请参考以下文章

突出显示具有相同类的所有 div

用 NgClass 悬停一个 div

jQuery 需要帮助在具有特定类的 div 元素中选择 tr 元素

悬停多个实例 div 时的独特声音

将覆盖悬停在具有多个div的容器中? (Flexbox的)

将悬停覆盖在具有多个 div 的容器上? (弹性盒)