经过一段时间的延迟后,一个接一个地翻转多个图像



在我的网站上,我想创建一个CSS动画,我试图在1秒延迟后一个接一个地翻转多个图像,但它不起作用。当第一个图像翻转时,第二个图像应该翻转然后翻转,依此类推

像这样但加载,每个图像应该一个接一个地翻转。假设有 4 张图像 第一张图像延迟翻转:0然后第二个图像延迟翻转:1 依此类推,直到第四个图像延迟:4

JavaScript

document.addEventListener("DOMContentLoaded", function() {
    var rotateComplete = function() {
    with(target.style) {
      webkitAnimationName = MozAnimationName = msAnimationName = "";
    }
    target.appendChild(arr[0]);
    setTimeout(function(el) {
      with(el.style) {
        webkitAnimationName = MozAnimationName = msAnimationName = "rotator2";
      }
    }, 0, target);
  };
  var target = document.getElementById("rotator2");
  var arr = target.getElementsByTagName("a");
  target.addEventListener("webkitAnimationEnd", rotateComplete, false);
  target.addEventListener("animationend", rotateComplete, false);
  target.addEventListener("MSAnimationEnd", rotateComplete, false);
}, false);
#stage2 {
  margin: 2em auto 1em 50%;
  height: 240px;
  -webkit-perspective: 1200px;
  -webkit-perspective-origin: 0 50%;
  -moz-perspective: 1200px;
  -moz-perspective-origin: 0 50%;
  -ms-perspective: 1200px;
  -ms-perspective-origin: 0 50%;
}
#rotator2 a {
  position: absolute;
  left: -151px;
  -moz-transform-style: preserve-3d;
}
#rotator2 a img {
  padding: 10px;
  border: 1px solid #ccc;
  background: #fff;
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
}
#rotator2 a:nth-child(1) img {
  -webkit-transform: rotateY(-120deg) translateZ(80px);
  -moz-transform: rotateY(-120deg) translateZ(80px);
  -ms-transform: rotateY(-120deg) translateZ(80px);
}
#rotator2 a:nth-child(2) img {
  -webkit-transform: translateZ(80px);
  -moz-transform: translateZ(80px);
  -ms-transform: translateZ(80px);
}
#rotator2 a:nth-child(3) img {
  -webkit-transform: rotateY(120deg) translateZ(80px);
  -moz-transform: rotateY(120deg) translateZ(80px);
  -ms-transform: rotateY(120deg) translateZ(80px);
}
#rotator2 a:nth-child(n+4) {
  display: none;
}
@-webkit-keyframes rotator2 {
  from {
    -webkit-transform: rotateY(0deg);
  }
  to {
    -webkit-transform: rotateY(-120deg);
  }
}
@-moz-keyframes rotator2 {
  from {
    -moz-transform: rotateY(0deg);
  }
  to {
    -moz-transform: rotateY(-120deg);
  }
}
@-ms-keyframes rotator2 {
  from {
    -ms-transform: rotateY(0deg);
  }
  to {
    -ms-transform: rotateY(-120deg);
  }
}
#rotator2 {
  -webkit-transform-origin: 0 0;
  -webkit-transform-style: preserve-3d;
  -webkit-animation-timing-function: cubic-bezier(1, 0.2, 0.2, 1);
  -webkit-animation-duration: 2s;
  -webkit-animation-delay: 1s;
  -moz-transform-origin: 0 0;
  -moz-transform-style: preserve-3d;
  -moz-animation-timing-function: cubic-bezier(1, 0.2, 0.2, 1);
  -moz-animation-duration: 2s;
  -moz-animation-delay: 1s;
  -ms-transform-origin: 0 0;
  -ms-transform-style: preserve-3d;
  -ms-animation-timing-function: cubic-bezier(1, 0.2, 0.2, 1);
  -ms-animation-duration: 2s;
  -ms-animation-delay: 1s;
}
#rotator2:hover {
  -webkit-animation-play-state: paused;
  -moz-animation-play-state: paused;
  -ms-animation-play-state: paused;
}
<div id="stage2">
  <div id="rotator2" style="-webkit-animation-name: rotator2; -moz-animation-name: rotator2; -ms-animation-name: rotator2;">
    <a href="1.jpg"><img src="img/1.jpg" width="280" alt ="1"></a>
    <a href="2.jpg"><img src="img/2.jpg" width="280" alt ="2"></a>
    <a href="3.jpg"><img src="img/3.jpg" width="280" alt ="3"></a>
    <a href="4.jpg"><img src="img/4.jpg" width="280" alt ="4"></a>
    <a href="5.jpg"><img src="img/5.jpg" width="280" alt ="5"></a>
    <a href="6.jpg"><img src="img/6.jpg" width="280" alt ="6"></a>
    <a href="7.jpg"><img src="img/7.jpg" width="280" alt ="7"></a>
    <a href="8.jpg"><img src="img/8.jpg" width="280" alt ="8"></a>
  </div>
  </div>

这里的第一个图像不断翻转

如果我

理解正确,正如我所说,您可以使用animation-delay.该值将为

(卡片索引( * animation-duration .

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    body {
      font-family: Arial, Helvetica, sans-serif;
    }
    
    .flip-card {
      display: inline-block;
      background-color: transparent;
      width: 300px;
      height: 300px;
      perspective: 1000px;
    }
    
    .flip-card-inner {
      position: relative;
      width: 100%;
      height: 100%;
      text-align: center;
      transition: transform 0.6s;
      transform-style: preserve-3d;
      box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
    }
    
    .flip-card-front,
    .flip-card-back {
      position: absolute;
      width: 100%;
      height: 100%;
      backface-visibility: hidden;
    }
    
    .flip-card-front {
      background-color: #bbb;
      color: black;
      z-index: 2;
    }
    
    .flip-card-back {
      background-color: #2980b9;
      color: white;
      transform: rotateY(180deg);
      z-index: 1;
    }
    
    .flip-card .flip-card-inner {
      animation: rotate 3s .3s infinite;
    }
    
    .flip-card:nth-child(2) .flip-card-inner {
      animation-delay: .6s;
    }
    
    .flip-card:nth-child(3) .flip-card-inner {
      animation-delay: .9s;
    }
    
    .flip-card:nth-child(4) .flip-card-inner {
      animation-delay: 1.2s;
    }
    
    @keyframes rotate {
      0%, 60% {
        transform: rotateY(0);
      }
      10%, 50% {
        transform: rotateY(180deg);
      }
    }
  </style>
</head>
<body>
  <h1>Card Flip with Text</h1>
  <h3>Hover over the image below:</h3>
  <div class="cards">
    <div class="flip-card">
      <div class="flip-card-inner">
        <div class="flip-card-front">
          <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:300px;height:300px;">
        </div>
        <div class="flip-card-back">
          <h1>John Doe</h1>
          <p>Architect & Engineer</p>
          <p>We love that guy</p>
        </div>
      </div>
    </div>
    <div class="flip-card">
      <div class="flip-card-inner">
        <div class="flip-card-front">
          <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:300px;height:300px;">
        </div>
        <div class="flip-card-back">
          <h1>John Doe</h1>
          <p>Architect & Engineer</p>
          <p>We love that guy</p>
        </div>
      </div>
    </div>
    <div class="flip-card">
      <div class="flip-card-inner">
        <div class="flip-card-front">
          <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:300px;height:300px;">
        </div>
        <div class="flip-card-back">
          <h1>John Doe</h1>
          <p>Architect & Engineer</p>
          <p>We love that guy</p>
        </div>
      </div>
    </div>
    <div class="flip-card">
      <div class="flip-card-inner">
        <div class="flip-card-front">
          <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:300px;height:300px;">
        </div>
        <div class="flip-card-back">
          <h1>John Doe</h1>
          <p>Architect & Engineer</p>
          <p>We love that guy</p>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

更新

若要无限运行它,动画的计算方式应不同,因为它应注意反向动画。

计算结果为

0.3 秒(翻转动画(* 5(4 张牌 + 迭代之间的延迟增加 1 张(* 2(来回(= 3 秒。

所以每个"刻度"是 10%。我们想在动画的中间把它翻回来,这样它就50%。更多 10% 用于背部动画刻度。

以下是生命周期:

|---|---|---|---|---|---|---|---|---|---|
|___|___|___|___|___|___|___|___|___|___|
Front w   w   w   w  Back w   w   w   w
 .3s .3s .3s .3s .3s .3s .3s .3s .3s .3s 
|_______________________________________|
                   3s

您可以简单地使用下面附加的代码HTML和CSS技巧:

<div class="c-searchblock_loop">
            <div class="c-searchblock_loop-content">
                <div class="c-searchblock_chevron">
                    <svg class="c-icon">
                        <use xlink:href="https://www.subachahai.com/dist/assets/icons/icons-sprite.svg#icon-chevron"></use>
                    </svg>
                </div>
                <div class="c-searchblock_image -first">
                    <img src="https://www.subachahai.com/dist/assets/images/searchblock-1.png" alt="tools-1">
                </div>
                <div class="c-searchblock_image -back -second">
                    <img src="https://www.subachahai.com/dist/assets/images/searchblock-2.png" alt="tools-2">
                </div>
                <div class="c-searchblock_image -third">
                    <img src="https://www.subachahai.com/dist/assets/images/searchblock-3.png" alt="tools-3">
                </div>
                <div class="c-searchblock_image -back -fourth">
                    <img src="https://www.subachahai.com/dist/assets/images/searchblock-4.png" alt="tools-4">
                </div>
            </div>
        </div>

.CSS:

.c-searchblock_chevron {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
}
.c-searchblock_chevron, .c-searchblock_image {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
.c-searchblock_image.-first {
    -webkit-animation: loop 2s cubic-bezier(.19,1,.22,1) infinite,loop-first 4s linear infinite;
    animation: loop 2s cubic-bezier(.19,1,.22,1) infinite,loop-first 4s linear infinite;
}
.c-searchblock_image {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    -webkit-transform-origin: 50% 50% -25px;
    transform-origin: 50% 50% -25px;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
}
.c-searchblock_chevron, .c-searchblock_image {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
.c-searchblock_image.-back.-second {
    -webkit-animation: loop-image-back 2s cubic-bezier(.19,1,.22,1) infinite,loop-second 4s cubic-bezier(.19,1,.22,1) infinite;
    animation: loop-image-back 2s cubic-bezier(.19,1,.22,1) infinite,loop-second 4s cubic-bezier(.19,1,.22,1) infinite;
}
.c-searchblock_image.-back {
    -webkit-transform-origin: 50% 50% 25px;
    transform-origin: 50% 50% 25px;
    -webkit-transform: rotateY(
180deg);
    transform: rotateY(
180deg);
}
.c-searchblock_image.-third {
    -webkit-animation: loop 2s cubic-bezier(.19,1,.22,1) infinite,loop-third 4s cubic-bezier(.19,1,.22,1) infinite;
    animation: loop 2s cubic-bezier(.19,1,.22,1) infinite,loop-third 4s cubic-bezier(.19,1,.22,1) infinite;
}
.c-searchblock_image.-back.-fourth {
    -webkit-animation: loop-image-back 2s cubic-bezier(.19,1,.22,1) infinite,loop-fourth 4s cubic-bezier(.19,1,.22,1) infinite;
    animation: loop-image-back 2s cubic-bezier(.19,1,.22,1) infinite,loop-fourth 4s cubic-bezier(.19,1,.22,1) infinite;
}
.c-searchblock_image.-back {
    -webkit-transform-origin: 50% 50% 25px;
    transform-origin: 50% 50% 25px;
    -webkit-transform: rotateY(
180deg);
    transform: rotateY(
180deg);
}
.c-searchblock.is-active .c-searchblock_footer,
.c-searchblock.is-active .c-searchblock_loop {
    -webkit-transform: translate(0);
    transform: translate(0)
}
.c-searchblock_loop {
    position: relative;
    display: inline-block;
    width: 180px;
    height: 180px;
    -webkit-perspective: 200px;
    perspective: 200px;
    -webkit-transform-style: preserve-3d;
    transform-style: preserve-3d;
    -webkit-transform: translateY(40px);
    transform: translateY(40px);
    -webkit-transition: -webkit-transform .8s cubic-bezier(.76, 0, .24, 1) .08s;
    transition: -webkit-transform .8s cubic-bezier(.76, 0, .24, 1) .08s;
    transition: transform .8s cubic-bezier(.76, 0, .24, 1) .08s;
    transition: transform .8s cubic-bezier(.76, 0, .24, 1) .08s, -webkit-transform .8s cubic-bezier(.76, 0, .24, 1) .08s
    margin: 50px auto;
}
.editMode .c-searchblock_loop {
    -webkit-transform: none;
    transform: none;
    -webkit-transition: none;
    transition: none
}
.c-searchblock_loop-content {
    width: 100%;
    height: 100%;
    -webkit-animation: loop 2s cubic-bezier(.19, 1, .22, 1) infinite;
    animation: loop 2s cubic-bezier(.19, 1, .22, 1) infinite
}
.c-searchblock_chevron,
.c-searchblock_image {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%
}
.c-searchblock_chevron {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center
}
.c-searchblock_chevron svg {
    fill: #fff;
    width: 120px;
    height: 110px;
    -webkit-transform: rotate(90deg);
    transform: rotate(90deg)
}
@-webkit-keyframes loop {
    0% {
        -webkit-transform: rotateY(0deg);
        transform: rotateY(0deg)
    }
    25% {
        -webkit-transform: rotateY(0deg);
        transform: rotateY(0deg)
    }
    50% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    75% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    to {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
}
@keyframes loop {
    0% {
        -webkit-transform: rotateY(0deg);
        transform: rotateY(0deg)
    }
    25% {
        -webkit-transform: rotateY(0deg);
        transform: rotateY(0deg)
    }
    50% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    75% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    to {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
}
@-webkit-keyframes loop-first {
    0% {
        opacity: 1
    }
    25% {
        opacity: 1
    }
    26% {
        opacity: 0
    }
    75% {
        opacity: 0
    }
    76% {
        opacity: 1
    }
    to {
        opacity: 1
    }
}
@keyframes loop-first {
    0% {
        opacity: 1
    }
    25% {
        opacity: 1
    }
    26% {
        opacity: 0
    }
    75% {
        opacity: 0
    }
    76% {
        opacity: 1
    }
    to {
        opacity: 1
    }
}
@-webkit-keyframes loop-second {
    0% {
        opacity: 1
    }
    50% {
        opacity: 1
    }
    51% {
        opacity: 0
    }
    to {
        opacity: 0
    }
}
@keyframes loop-second {
    0% {
        opacity: 1
    }
    50% {
        opacity: 1
    }
    51% {
        opacity: 0
    }
    to {
        opacity: 0
    }
}
@-webkit-keyframes loop-third {
    0% {
        opacity: 0
    }
    25% {
        opacity: 0
    }
    26% {
        opacity: 1
    }
    75% {
        opacity: 1
    }
    76% {
        opacity: 0
    }
    to {
        opacity: 0
    }
}
@keyframes loop-third {
    0% {
        opacity: 0
    }
    25% {
        opacity: 0
    }
    26% {
        opacity: 1
    }
    75% {
        opacity: 1
    }
    76% {
        opacity: 0
    }
    to {
        opacity: 0
    }
}
@-webkit-keyframes loop-fourth {
    0% {
        opacity: 0
    }
    50% {
        opacity: 0
    }
    51% {
        opacity: 1
    }
    to {
        opacity: 1
    }
}
@keyframes loop-fourth {
    0% {
        opacity: 0
    }
    50% {
        opacity: 0
    }
    51% {
        opacity: 1
    }
    to {
        opacity: 1
    }
}
@-webkit-keyframes loop-image-back {
    0% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    25% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    50% {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
    75% {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
    to {
        -webkit-transform: rotateY(540deg);
        transform: rotateY(540deg)
    }
}
@keyframes loop-image-back {
    0% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    25% {
        -webkit-transform: rotateY(180deg);
        transform: rotateY(180deg)
    }
    50% {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
    75% {
        -webkit-transform: rotateY(1turn);
        transform: rotateY(1turn)
    }
    to {
        -webkit-transform: rotateY(540deg);
        transform: rotateY(540deg)
    }
}

最新更新