【问题标题】:CSS animation transitionCSS动画过渡
【发布时间】:2018-04-20 15:03:20
【问题描述】:

我的 CSS 中的动画过渡时间逻辑存在一些问题。我有 3 张必须幻灯片放映的图像。我想在 15 秒内将图像从 image1 更改为 image2,并在 15 秒内将 image2 更改为 image3,并在 30 秒内从图像 3 返回到图像 1。我不知道如何使用我的 css 动画计时逻辑来做到这一点。

这是我的 html 代码:

<ul>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Ford-GT90_Concept_1995_800x600_wallpaper_01.jpg"></li>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Mercedes-Benz-SLR_McLaren_2004_800x600_wallpaper_02.jpg"></li>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Porsche-911_Carrera_4S_2002_800x600_wallpaper_0d.jpg"></li>
</ul>

这是我的 CSS:

ul {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
}

li {
  position: absolute;
}

li:nth-child(3) {
  animation: xfade 15s 4s infinite;
}
li:nth-child(2) {
  animation: xfade 15s 8s infinite;
}
li:nth-child(1) {
  animation: xfade 15s 12s infinite;
}

@keyframes xfade{
  17% {
    opacity:1;
  }
  25% {
    opacity:0;
  }
  92% {
    opacity:0;
  }
}

我创建了 jsfidle,这样每个人都可以在这种情况下进行一些测试。 https://jsfiddle.net/ag0hLhnj/1/

【问题讨论】:

  • 您已经放弃了这个以及您在 SO 上发布的其他相同问题。请查看两个答案。
  • 为什么不赞成@Niloct?我很高兴删除答案,但经过大量思考和研究后,我想知道您反对的原因。
  • 因为只用 css 就可以解决这个问题!检查我在另一个问题中的答案。
  • @Niloct 太好了,谢谢。我已经运行了你的 sn-p 一段时间了,它似乎挂在最后一张幻灯片上。它真的会无限期地持续下去吗?我不知道如何让它无限循环并保持时间,这就是我求助于 js 的原因。
  • 好的! OP 希望它在 2 个循环后保持在第 3 个图像中。您可以将 animation-iteration-count 所在的 2(以及其他规则的内联形式)更改为 infinite

标签: html css animation


【解决方案1】:

无限动画在循环之间不能有延迟。这意味着延迟时间的唯一方法是在动画中缓冲它(使后面的动画更长,并在动画本身中内置延迟)。

虽然这在技术上使用 css 是可行的,但它不会很好地扩展。也就是说,在您的其他问题中,有一个很好的例子:CSS Animation Delay and Keyframe

相反,您可能希望使用 jquery 来控制循环。

(function($){ // Closure to avoid jQuery conflicts
$(window).load(function() { //start after HTML, images have loaded

var itemInterval = 2500;

var InfiniteRotator =
{
  init: function()
  {
    var initialFadeIn = 0; //initial fade-in time (in milliseconds)

    var fadeTime = 2500; //cross-fade time (in milliseconds)
    var numberOfItems = 3; //count number of items
    var currentItem = 0; //set current item

    //show first item
    $('ul li').eq(currentItem).addClass('current-item'); // Can Add a Class With CSS Rules
    // $('ul li').eq(currentItem).fadeIn(fadeTime); // Or Can Fade-in using jQuery

    //loop through the items
    var infiniteLoop = setInterval(function(){

      if(currentItem == numberOfItems -1){
        currentItem = 0;
      }else{
        currentItem++;
      }

      $('ul li').removeClass('current-item');
      $('ul li').eq(currentItem).addClass('current-item');

    }, itemInterval);
  }
};

InfiniteRotator.init();

});       
})(jQuery);
ul {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
}

li {
  position: absolute;
  display:none;
}

li.current-item {
  display:inline-block;
}
<script
  src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>
  
<ul>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Ford-GT90_Concept_1995_800x600_wallpaper_01.jpg"></li>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Mercedes-Benz-SLR_McLaren_2004_800x600_wallpaper_02.jpg"></li>
  <li><img width="500" height="500" src="http://img2.netcarshow.com/Porsche-911_Carrera_4S_2002_800x600_wallpaper_0d.jpg"></li>
</ul>

【讨论】:

  • 感谢您的回答。我真的不明白这一点。你能给我一些在 15 秒内完成图像转换的代码,当它回到第一张图像时,它会在 30 秒内完成?
  • 我上面的代码给了我动画幻灯片,但它会在 4 秒内改变,我无法在 15 秒内完成。
  • @Antonio 我不认为你可以那样做。
  • 你能给我一些完整的样本吗?
  • 编辑了我的答案。您将能够自己解决 css 转换,嗯?
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 2012-05-14
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2018-02-06
  • 2014-04-26
相关资源
最近更新 更多