CSS淡入淡出延迟?

CSS Fade Delay?

我正在尝试为我的网站创建一个幻灯片横幅,我的想法是使用 z-index 将它们堆叠起来,然后让顶部的淡出以显示下面的那个,然后将其自身移动到底部堆栈。

我不完全理解 CSS 淡入淡出规则是如何工作的,它们似乎是同时淡出堆栈中的所有图像,而不仅仅是顶部的图像。有没有一种优雅的方法可以使淡入淡出 class 跟随堆栈的顶部图像,以便它仅在顶部时淡出?

如有任何帮助,我们将不胜感激...

var slidePosition = 0;
fadeSlides();


function fadeSlides() {
  var i;
  var slide = document.getElementsByClassName("mySlides");
  for (i = 0; i < slide.length; i++) {
    slide[i].style.zIndex = slide[i].style.zIndex + 1;
    slide[i].style.opacity = "1";
  }
  slidePosition++;
  if (slidePosition > slide.length) {
    slidePosition = 1
  }
  slide[slidePosition - 1].style.opacity = "0";
  slide[slidePosition - 1].style.zIndex = "0";
  setTimeout(fadeSlides, 3500);

}
.slideshow-container {
  width: 100%;
  position: relative;
}

.mySlides {
  opacity: 1;
  position: absolute;
}

.fade {
  animation: fade 1s infinite;
}

@keyframes fade {
  0% {
    opacity: 1
  }
  100% {
    opacity: 0
  }
}
<div class="slideshow-container">

  <div class="mySlides fade" style="z-index: 5">
    <img src="https://i.imgur.com/h9HMwvD.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 4">
    <img src="https://i.imgur.com/inAYNo3.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 3">
    <img src="https://i.imgur.com/8VHulyg.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 2">
    <img src="https://i.imgur.com/wZzx8GU.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 1">
    <img src="https://i.imgur.com/ZPO4z3V.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 0">
    <img src="https://i.imgur.com/yhuKaY8.png" style="width:100%">
  </div>

</div>

只需使用 transition 因为不需要使用 animation 因为您正在使用 JS

更改属性

var slidePosition = 0;
fadeSlides();


function fadeSlides() {
  var i;
  var slide = document.getElementsByClassName("mySlides");
  for (i = 0; i < slide.length; i++) {
    slide[i].style.zIndex = slide[i].style.zIndex + 1;
    slide[i].style.opacity = "1";
  }
  slidePosition++;
  if (slidePosition > slide.length) {
    slidePosition = 1
  }
  slide[slidePosition - 1].style.opacity = "0";
  slide[slidePosition - 1].style.zIndex = "0";
  setTimeout(fadeSlides, 3500);

}
.slideshow-container {
  width: 100%;
  position: relative;
}

.mySlides {
  opacity: 1;
  position: absolute;
}

.fade {
  transition: opacity 1s, z-index 0s 1s;
}
<div class="slideshow-container">

  <div class="mySlides fade" style="z-index: 5">
    <img src="https://i.imgur.com/h9HMwvD.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 4">
    <img src="https://i.imgur.com/inAYNo3.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 3">
    <img src="https://i.imgur.com/8VHulyg.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 2">
    <img src="https://i.imgur.com/wZzx8GU.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 1">
    <img src="https://i.imgur.com/ZPO4z3V.png" style="width:100%">
  </div>

  <div class="mySlides fade" style="z-index: 0">
    <img src="https://i.imgur.com/yhuKaY8.png" style="width:100%">
  </div>

</div>

Temani Afif 的回答将有助于使您当前的方法看起来不错,但更简单的答案是,正如其他人评论的那样,只需在 one[=32] 上切换 class =]一次滑动。

您可以使用 CSS transition 属性 来更简单地执行此操作,而不必涉及 @keyframes:给所有幻灯片一个过渡 属性,然后切换 opacityfade class。这样,当 fade class 从一张幻灯片切换到另一张幻灯片时,旧幻灯片会淡出,而新幻灯片会同时淡入。

您还可以通过不必为每张幻灯片单独 z-index 来进一步简化事情。不要试图按特定顺序将幻灯片全部堆叠在一起,只需担心将正确的幻灯片移到堆的顶部,不要担心下面的所有其他幻灯片,因为您看不到它们无论如何。

fadeSlides();


function fadeSlides() {
  var slide = document.getElementsByClassName("fade")[0];
  var nextSlide = slide.nextElementSibling;
  
  if (nextSlide) {
    nextSlide.classList.add('fade');
  } else {
    document.getElementsByClassName('mySlides')[0].classList.add('fade');
  }
  slide.classList.remove('fade');

  setTimeout(fadeSlides, 3500);
}
.slideshow-container {
  width: 100%;
  position: relative;
}

.mySlides {
  opacity: 0;
  position: absolute;
  transition: opacity 1000ms ease;
}

.mySlides.fade {
  opacity: 1;
  z-index: 1;
}
<div class="slideshow-container">
  <div class="mySlides fade">
    <img src="https://i.imgur.com/h9HMwvD.png" style="width:100%">
  </div>
  <div class="mySlides">
    <img src="https://i.imgur.com/inAYNo3.png" style="width:100%">
  </div>
  <div class="mySlides">
    <img src="https://i.imgur.com/8VHulyg.png" style="width:100%">
  </div>
  <div class="mySlides">
    <img src="https://i.imgur.com/wZzx8GU.png" style="width:100%">
  </div>
  <div class="mySlides">
    <img src="https://i.imgur.com/ZPO4z3V.png" style="width:100%">
  </div>
  <div class="mySlides">
    <img src="https://i.imgur.com/yhuKaY8.png" style="width:100%">
  </div>
</div>