【问题标题】:How to remove hover state如何移除悬停状态
【发布时间】:2020-01-08 19:01:08
【问题描述】:

1) 我创建了一个不透明度为 1 的图像。当您将鼠标悬停在它上面时,不透明度变为 0.3,并且图像上方会出现一个按钮。问题是,当您将鼠标悬停在按钮上时,图像的不透明度返回 1。当鼠标悬停在图像或按钮上时,如何使图像的不透明度保持 0.3?

2) 当您点击播放时,原图变为新图。但由于鼠标悬停在图像上,新图像的不透明度为 0.3。即使悬停,如何将新图像设置为不透明度为 1?

var originalImgSrc = $('img').attr('src');

// Change image on button click
$(".the-buttons").click(function() {

  $('img').attr("src", "https://s3.amazonaws.com/blitzbase-assets/assets/2.gif");
  $(this).addClass("hide");
});

//Restore image on mouse out
$('.show-image img').mouseout(function() {
  $('img').attr("src", originalImgSrc);
  $('.the-buttons').removeClass("hide");
});
div.show-image {
  position: relative;
  float: left;
  margin: 0px;
  padding: 0px;
  background: #333;
}

div.show-image img {
  opacity: 1;
  background: white;
}

div.show-image img:hover {
  opacity: .3;
  -webkit-transition: opacity .2s ease-in-out;
}

div.show-image:hover input {
  display: block;
}

div.show-image input {
  position: absolute;
  display: none;
  top: 100px;
  left: 100px;
}

div.show-image input.hide {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="show-image">
  <img src="https://via.placeholder.com/100.png/09f/fff" />
  <input class="the-buttons" type="button" value="Play" />
</div>

【问题讨论】:

  • 对于非 WebKit 浏览器,除了 -webkit-transition 之外,您可能还想添加 transition

标签: javascript jquery html css


【解决方案1】:

Here's a fiddle

以下是您两个问题的答案。

  1. 将鼠标悬停在父级上:

    .show-image:hover img

  2. 在父级上添加“隐藏”类并以这种方式更改不透明度。

    $(this).parent().addClass("hide");

    div.show-image.hide img{ 不透明度:1; }

  3. 要在第一次单击后将播放按钮重新添加到悬停状态,您必须在鼠标移出功能中从父级中删除隐藏类:

    $('.the-buttons').parent().removeClass("hide");

【讨论】:

  • 嘿@MathiasaurusRex - 非常感谢!这正好解决了我的两个问题。现在发生的唯一新问题是,在我单击按钮并替换图像后,我再也看不到该按钮。我怎样才能重置它,使它像在开始状态一样再次运行?
  • @ori 很抱歉错过了那部分:您必须在 mouseout 事件中添加父选择器。 jsfiddle.net/MathiasaurusRex/9DS2r/14$('.the-buttons').parent().removeClass("hide");
【解决方案2】:

改变你的CSS 从此:

div.show-image img:hover {
     opacity: .3;
    -webkit-transition: opacity .2s ease-in-out;
}

到这里:

div.show-image:hover img {
     opacity: .3;
    -webkit-transition: opacity .2s ease-in-out;
}

希望这会有所帮助。完整的sn-p:

var originalImgSrc = $('img').attr('src');

// Change image on button click
$(".the-buttons").click(function() {

  $('img').attr("src", "https://s3.amazonaws.com/blitzbase-assets/assets/2.gif");
  $(this).addClass("hide");
});

//Restore image on mouse out
$('.show-image img').mouseout(function() {
  $('img').attr("src", originalImgSrc);
  $('.the-buttons').removeClass("hide");
});
div.show-image {
  position: relative;
  float: left;
  margin: 0px;
  padding: 0px;
  background: #333;
}

div.show-image img {
  opacity: 1;
  background: white;
}

div.show-image:hover img {
  opacity: .3;
  -webkit-transition: opacity .2s ease-in-out;
}

div.show-image:hover input {
  display: block;
}

div.show-image input {
  position: absolute;
  display: none;
  top: 100px;
  left: 100px;
}

div.show-image input.hide {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="show-image">
  <img src="https://via.placeholder.com/100.png/09f/fff" />
  <input class="the-buttons" type="button" value="Play" />
</div>

【讨论】:

  • 请注意,jQuery 来“恢复”图像是没有必要的。
【解决方案3】:

我从 CSS 中删除了您的不透明度,并将其放在您的 jQuery 函数中。我还用 .hover() 替换了您的事件处理程序,并以父容器为目标。

$('.show-image').hover(
  function() {
    $(this)
      .find('img').css('opacity', '.3').end()
      .find('input').show();
  }, function() {
    $(this)
      .find('img').css('opacity', '1').attr("src", originalImgSrc).end()
      .find('input').hide();
  }
);

var originalImgSrc = $('img').attr('src');

// Change image on button click
$(".the-buttons").click(function() {

  $('img').attr("src", "https://s3.amazonaws.com/blitzbase-assets/assets/2.gif").css('opacity', 1);
  $(this).hide();
});

$('.show-image').hover(
  function() {
    $(this)
      .find('img').css('opacity', '.3').end()
      .find('input').show();
  },
  function() {
    $(this)
      .find('img').css('opacity', '1').attr("src", originalImgSrc).end()
      .find('input').hide();
  }
);
div.show-image {
  position: relative;
  float: left;
  margin: 0px;
  padding: 0px;
  background: #333;
}

div.show-image img {
  background: white;
}

div.show-image:hover input {
  display: block;
}

div.show-image input {
  position: absolute;
  display: none;
  top: 100px;
  left: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="show-image">
  <img src="https://via.placeholder.com/100.png/09f/fff" />
  <input class="the-buttons" type="button" value="Play" />
</div>

另外,请注意我为在单击“播放”时恢复不透明度所做的更新。

【讨论】:

  • 看起来不错,但是为什么下一次悬停第二张图片时按钮没有返回?
  • 我不知道它需要。在这种情况下,您需要做的就是删除悬停时的“隐藏”类。
  • 感谢 Dean.DePue.. 是的 @Steve - 我需要按钮返回,但只有第一张图片...不是第二张图片。
  • @ori 小心这些通过 javascript 更改 css 的解决方案。 Javascript 应该创建功能并保留您的样式。您不想从现在开始查看您的样式表并想知道为什么样式不一样。
  • 话虽如此,这可以很容易地修改以添加和删除使用样式表的类。无论哪种方式都可以解决问题。
【解决方案4】:

您可以使用mouseover/mouseout 事件来添加/删除类并将css添加到该类,我添加了.hovered类。

var originalImgSrc = $('img').attr('src');

// Change image on button click
$(".the-buttons").click(function() {

  $('img').attr("src", "https://s3.amazonaws.com/blitzbase-assets/assets/2.gif");
  $(this).addClass("hide");
});

function addHOVER() {
  $('.show-image img').addClass("hovered");
}

function remHOVER() {
  $('.show-image img').removeClass("hovered");
}

$(".show-image img").mouseover(addHOVER);
$(".show-image .the-buttons").mouseover(addHOVER);
$(".show-image .the-buttons").mouseout(remHOVER);
//Restore image on mouse out
$('.show-image img').mouseout(function() {
  $('img').attr("src", originalImgSrc);
  remHOVER();
  $('.the-buttons').removeClass("hide");
});
div.show-image {
  position: relative;
  float: left;
  margin: 0px;
  padding: 0px;
  background: #333;
}

div.show-image img {
  opacity: 1;
  background: white;
}

div.show-image img.hovered {
  opacity: .3;
  -webkit-transition: opacity .2s ease-in-out;
}

div.show-image:hover input {
  display: block;
}

div.show-image input {
  position: absolute;
  display: none;
  top: 100px;
  left: 100px;
}

div.show-image input.hide {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="show-image">
  <img src="https://via.placeholder.com/100.png/09f/fff" />
  <input class="the-buttons" type="button" value="Play" />
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多