【问题标题】:jquery "show" effect shows wrong elementjquery“显示”效果显示错误的元素
【发布时间】:2015-01-02 18:12:25
【问题描述】:

我试图让两个图标,“向上”和“向下”,当我将鼠标悬停在它们上方时,它们的颜色会变深。所以我又做了两个图标,“UpHover”和“DownHover”,它们一开始是隐藏的,当我鼠标进入向上或向下时分别显示,当我鼠标离开它们时再次隐藏。 Down正常工作,但是由于某种原因,当我鼠标进入Up时,Up和Down都被隐藏了,并且UpHover和DownHover都显示出来了。

当我删除$(".UpHover").show(); 行时(我在它下面加上了星号),效果停止了,所以错误必须在该行中。但我终其一生都无法弄清楚为什么那条线与 Down 或 DownHover 有任何关系。我错过了什么?

<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>
<script type="text/javascript">
  $(".UpHover").hide();
  $(".DownHover").hide();
  $(".Up").mouseenter(function () {
    $(".Up").hide();
    ***$(".UpHover").show();***
  });
  $(".UpHover").mouseleave(function () {
    $(".Up").show();
    $(".UpHover").hide();
  });
  $(".Down").mouseenter(function () {
    $(".Down").hide();
    $(".DownHover").show();
  });
  $(".DownHover").mouseleave(function () {
    $(".Down").show();
    $(".DownHover").hide();
  });
</script>

【问题讨论】:

标签: javascript jquery hide show mouseenter


【解决方案1】:

更改图像的顺序,使替换的图像位于它所替换的图像旁边。

<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>

发生的情况是,当您隐藏 Up 时,Down 图像会向上移动以填充该空间。因为那是鼠标所在的位置,所以$(".Down").mouseenter 事件会触发,并且它也会被隐藏。

当您重新排序时,UpHover 会填充 Up 的位置。

【讨论】:

  • 哇,没想到会这样。谢谢,我会尽快接受您的答复!
【解决方案2】:

正如其他人建议的那样,只需使用 CSS,您不需要任何 JavaScript:

<%= link_to "#", class: "Up" %>
<%= link_to "#", class: "Down" %>

.Up, .Down
{
    display: inline-block;
    height: /* height of image */;
    width: /* width of image */;
}

.Up
{
    background-image: url(Up.png);
}

.Down
{
    background-image: url(Down.png);
}

.Up:hover
{
    background-image: url(UpHover.png);
}

.Down:hover
{
    background-image: url(DownHover.png);
}

【讨论】:

  • 使用 CSS 有什么好处吗?
  • @user3739453 当然可以。在你的 CSS 和你的 JavaScript 中保持样式是Separation of Concerns 的标志之一。所以你能做到的越多越好。
  • 但是它会提高速度还是防止错误或其他什么?
  • 它并不能直接防止bug,但一般会提高可读性、可重用性并降低代码复杂度。
  • @user3739453 就减少您需要的代码量而言,它有助于减少出错的可能性。
【解决方案3】:

您应该使用 CSS 伪类 :hover 来执行此操作,而不是 javascript。

当元素有鼠标悬停时,您可以定义一组特殊的样式。指定此样式的备用图片。

【讨论】:

  • 使用 CSS 有什么好处吗?
【解决方案4】:

最好更改背景位置或更改悬停类,

$('.Up').hover(function(){
    $(this).addClass('active');
}, function(){
    $(this).removeClass('active');
});

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 2022-01-16
    • 2021-12-31
    相关资源
    最近更新 更多