簡體   English   中英

每個圖像之間的平滑過渡

[英]Smooth transition between each images

我的項目中有這個幻燈片,但是在圖像之間切換時看起來很突然。 換句話說,我希望它在它們之間平滑地變化。

<div>
  <img class="mySlides" src="assets/img/big_logo_1.svg" max-width="100%">
  <img class="mySlides" src="assets/img/big_logo_2.svg" max-width="100%">
  <img class="mySlides" src="assets/img/big_logo_3.svg" max-width="100%">
</div>
.mySlides {display:none; max-width: 100%;}
var myIndex = 0;
          carousel();

          function carousel() {
            var i;
            var x = document.getElementsByClassName("mySlides");
            for (i = 0; i < x.length; i++) {
              x[i].style.display = "none";  
            }
            myIndex++;
            if (myIndex > x.length) {myIndex = 1}    
            x[myIndex-1].style.display = "block";  
            setTimeout(carousel, 3000); // Change image every 3 seconds
          }

使用 css 過渡和以絕對方式定位的圖像,您可以通過對代碼進行一些調整來實現它:

<div class="carousel">
  <img class="mySlides" src="https://source.unsplash.com/random">
  <img class="mySlides" src="https://source.unsplash.com/random/?cat">
  <img class="mySlides" src="https://source.unsplash.com/random/?dog">
</div>
.carousel{
  max-width: 100%;
  position: relative;
  height: auto;
}

img{
  width: 100%;
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  transition: 0.3s opacity ease-in-out;
}
  padding: 0;

 var myIndex = 0; carousel(); function carousel() { var i; var x = document.getElementsByClassName("mySlides"); for (i = 0; i < x.length; i++) { x[i].style.opacity = 0; } myIndex++; if (myIndex > x.length) { myIndex = 1 } x[myIndex - 1].style.opacity = 1; setTimeout(carousel, 3000); // Change image every 3 seconds }
 .carousel { max-width: 100%; position: relative; height: auto; } img { width: 100%; position: absolute; left: 0; top: 0; display: block; transition: 0.3s opacity ease-in-out; }
 <div class="carousel"> <img class="mySlides" src="https://source.unsplash.com/random"> <img class="mySlides" src="https://source.unsplash.com/random/?cat"> <img class="mySlides" src="https://source.unsplash.com/random/?dog"> </div>

我希望它會幫助你。

 .logo-container { position: relative; }.bannerImg01 { animation: bannerImg01 15s infinite; }.bannerImg02 { position: absolute; top: 0; left: 0; animation: bannerImg02 15s infinite; }.bannerImg03 { position: absolute; top: 0; left: 0; animation: bannerImg03 15s infinite; } @keyframes bannerImg01 { 0% {opacity: 1;} 20.833333% {opacity: 1;} 33.333333% {opacity: 0;} 87.5% {opacity: 0;} 100% {opacity: 1} } @keyframes bannerImg02 { 0% {opacity: 0;} 20.833333% {opacity: 0;} 33.333333% {opacity: 1;} 54.166666% {opacity: 1;} 66.666666% {opacity: 0;} 100% {opacity: 0;} } @keyframes bannerImg03 { 0% {opacity: 0;} 54.166666% {opacity: 0;} 66.666666% {opacity: 1;} 87.5% {opacity: 1;} 100% {opacity: 0;} }
 <div class="logo-container"> <img class="bannerImg01" src="assets/img/big_logo_1.svg" max-width="100%"> <img class="bannerImg02" src="assets/img/big_logo_2.svg" max-width="100%"> <img class="bannerImg03" src="assets/img/big_logo_3.svg" max-width="100%"> </div>

/* The animation code */
@keyframes example {
  from {opacity: 0;}
  to {opacity: 1;}
}

/* The element to apply the animation to */
.mySlides {
  animation-name: example;
  animation-duration: 4s;
}

添加類似這樣的內容將允許您指定圖像的顯示方式。 換句話說,查看 css 動畫。 來源: https://www.w3schools.com/css/css3_animations.asp

而不是使用display:block/none使用opacity:0/1並添加一個transition:opacity 300ms ease以使其平滑,如下所示:

    .mySlides {
      opacity:0; 
      max-width: 100%;
      transition:opacity 300ms ease
}
    .mySlides.active {opacity:1}

在 javascript

   var x = [...document.getElementsByClassName("mySlides")];
   var current = 0
    function carousel(){
      x.forEach(el=>el.classList.remove('active'))    
      current=current<x.length-1?current+1:0;
            x[current].classList.add('active');
    }
    setInterval(carousel,3000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM