javascript - 使用数据属性将鼠标悬停在链接上时更改(和淡入/淡出)图像

标签 javascript jquery html css

我正在尝试重新创建我在该网站上看到的幻灯片/轮播效果(向下滚动到英雄横幅):https://www.ktm.com

我认为一旦将某个元素悬停在上方,旋转木马的背景就会发生变化,这看起来很棒。这是我取得的进展:

https://codepen.io/moy/pen/QVvMxo

看看 KTM 示例,它对我来说似乎过于复杂,也许是某个框架的一部分?所以我尽量简化它。

我不认为我的示例距离一百万英里远,但它需要一些改进。我遇到的主要问题是当这 3 个元素悬停时,确保图像淡入/淡出而不是立即改变。这是否可以通过我正在使用的方法来实现,即使用 data-* 属性更新 img src=""

我尝试添加 .fadeIn.delay 但它似乎没有做任何事情。

我遇到的另一个问题是,当您将鼠标悬停在文本似乎闪烁的元素上后,将鼠标从轮播中移开。看起来这与 img 不透明度的变化有关,因为当我删除它时它不会发生 - 但我还没有深入了解,所以任何指针都将不胜感激。

谢谢!

$(".carousel__item").hover(function() { // Changes the .image-holder's img src to the src defined in .list a's data attribute.
  var value = $(this).attr('data-src');
  $(".carousel__bg img").attr("src", value);
});
.carousel {
  background: #222;
  border: 1px solid white;
  margin: 0 auto;
  overflow: hidden;
  position: relative;
  width: 100%;
  max-width: 1200px;
}

.carousel__bg {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}

.carousel__bg img {
  -o-object-fit: cover;
     object-fit: cover;
  height: 100%;
  width: 100%;
}

.carousel__item {
  border: 1px solid white;
  box-sizing: border-box;
  float: left;
  position: relative;
  width: 33.33333%;
}

.carousel__content {
  box-sizing: border-box;
  color: #fff;
  height: 100%;
  padding: 15px;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  -webkit-backface-visibility: hidden;
}

.carousel__title {
  transition: all .25s;
  -webkit-backface-visibility: hidden;
}

.carousel__subtitle {
  display: none;
  -webkit-backface-visibility: hidden;
}

.carousel__btn {
  background: #fff;
  color: #222;
  display: block;
  opacity: 0;
  position: absolute;
  padding: 15px 30px;
  bottom: 15px;
  left: 15px;
  right: 15px;
  text-align: center;
  text-decoration: none;
  transition: all .25s;
  -webkit-backface-visibility: hidden;
}

.carousel__image {
  display: block;
  opacity: 1;
  transition: all .25s;
  width: 100%;
  max-width: 100%;
  -webkit-backface-visibility: hidden;
}

.carousel:hover .carousel__title {
  opacity: .25;
}

.carousel:hover .carousel__image {
  opacity: 0;
}

.carousel:hover .carousel__item:hover .carousel__title {
  opacity: 1;
}

.carousel:hover .carousel__item:hover .carousel__flag {
  display: none;
}

.carousel:hover .carousel__item:hover .carousel__subtitle {
  display: block;
}

.carousel:hover .carousel__item:hover .carousel__btn {
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="carousel">
  <div class="carousel__bg">
    <img src="https://fillmurray.com/800/300">
  </div>
  <div class="carousel__item" data-src="https://fillmurray.com/800/500">
    <div class="carousel__content">
      <h2 class="carousel__title">Product Name #1</h2>
      <span class="carousel__flag">Featured</span>
      <h2 class="carousel__subtitle">Longer, catchy, impactful statement</h2>
      <a href="#" class="carousel__btn">Find Out More</a>
    </div>
    <img src="https://fillmurray.com/250/400" class="carousel__image" />
  </div>
  <div class="carousel__item" data-src="https://fillmurray.com/800/400">
    <div class="carousel__content">
      <h2 class="carousel__title">Product Name #2</h2>
      <span class="carousel__flag">Featured</span>
      <h2 class="carousel__subtitle">Longer, catchy, impactful statement</h2>
      <a href="#" class="carousel__btn">Find Out More</a>
    </div>
    <img src="https://fillmurray.com/250/400" class="carousel__image" />
  </div>
  <div class="carousel__item" data-src="https://fillmurray.com/800/300">
    <div class="carousel__content">
      <h2 class="carousel__title">Product Name #3</h2>
      <span class="carousel__flag">Featured</span>
      <h2 class="carousel__subtitle">Longer, catchy, impactful statement</h2>
      <a href="#" class="carousel__btn">Find Out More</a>
    </div>
    <img src="https://fillmurray.com/250/400" class="carousel__image" />
  </div>
</div>

最佳答案

使用 style="display: none" 创建这些图像而不是替换图像源。然后你可以使用 jquery $(".carousel__item").hover(showImage, hideImage) 来实现你的目标。

$(image).show()$(image).hide() 应该足以满足您的需求

关于javascript - 使用数据属性将鼠标悬停在链接上时更改(和淡入/淡出)图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156434/

相关文章:

按钮单击时的 JqueryUI 工具提示而不是悬停显示在其他地方

javascript - 类型错误 : d is null

javascript - 在 Angular JS 中垂直对齐单选按钮

javascript - Javascript 的 HTMLCollection 中的对象变量比较

javascript - 将 div 元素与 html 元素并排对齐

javascript - 滑动时光滑的轮播触发点击事件

javascript - Jquery UI 中对话框的空标题

javascript - jquery mouseenter 在 ios Safari 和其他触摸设备上触发。如何阻止它?

html - 控制相邻DIV到IMG标签的高度

javascript - 在 Javascript 中绘图时处理倒置的 Y 轴?