Css动画一次显示3个图像

时间:2017-01-03 11:27:59

标签: css css-animations

我正在尝试使用css动画一次显示3张图片(当前为12张)。我想首先显示图像1-3,然后是4-6,然后是7-9,然后是10-12。

到目前为止我有这个,但是我无法理解如何使用:第n个选择器在隐藏其余部分的同时显示3个。

这或多或少是我到目前为止所做的:

#crossfade > img {
  max-width: 30%;
  height: auto;
  opacity: 0;
  z-index: 0;
  -webkit-backface-visibility: hidden;
  animation: imageAnimation 30s linear infinite 0s;
}

#crossfade > img:nth-child(n+3) {
  animation-delay: 6s;
}

@keyframes imageAnimation {
  0% {
    opacity: 0;
    animation-timing-function: ease-in;
  }
  8% {
    opacity: 1;
    animation-timing-function: ease-out;
  }
  17% {
    opacity: 1
  }
  25% {
    opacity: 0
  }
  100% {
    opacity: 0
  }
}

以下示例[or click here for jsfiddle]

#crossfade {
  height: 185px;
  width: 100%;
  position: relative;
}

#crossfade > img {
  max-width: 30%;
  height: auto;
  opacity: 0;
  z-index: 0;
  -webkit-backface-visibility: hidden;
  -webkit-animation: imageAnimation 30s linear infinite 0s;
  -moz-animation: imageAnimation 30s linear infinite 0s;
  -o-animation: imageAnimation 30s linear infinite 0s;
  -ms-animation: imageAnimation 30s linear infinite 0s;
  animation: imageAnimation 30s linear infinite 0s;
}

#crossfade > img:nth-child(n+3) {
  -webkit-animation-delay: 6s;
  -moz-animation-delay: 6s;
  -o-animation-delay: 6s;
  -ms-animation-delay: 6s;
  animation-delay: 6s;
}

#crossfade > img:nth-child(n+3) {
  -webkit-animation-delay: 12s;
  -moz-animation-delay: 12s;
  -o-animation-delay: 12s;
  -ms-animation-delay: 12s;
  animation-delay: 12s;
}

#crossfade > img:nth-child(4) {
  -webkit-animation-delay: 18s;
  -moz-animation-delay: 18s;
  -o-animation-delay: 18s;
  -ms-animation-delay: 18s;
  animation-delay: 18s;
}

#crossfade > img:nth-child(5) {
  -webkit-animation-delay: 24s;
  -moz-animation-delay: 24s;
  -o-animation-delay: 24s;
  -ms-animation-delay: 24s;
  animation-delay: 24s;
}

@keyframes imageAnimation {
  0% {
    opacity: 0;
    animation-timing-function: ease-in;
  }
  8% {
    opacity: 1;
    animation-timing-function: ease-out;
  }
  17% {
    opacity: 1
  }
  25% {
    opacity: 0
  }
  100% {
    opacity: 0
  }
}
<div id="crossfade">
  <img src="http://dummyimage.com/120x185&text=Img 1" alt="Image 1">
  <img src="http://dummyimage.com/120x185&text=Img 2" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 3" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 4" alt="Image 4">
  <img src="http://dummyimage.com/120x185&text=Img 5" alt="Image 5">
  <img src="http://dummyimage.com/120x185&text=Img 6" alt="Image 6">
  <img src="http://dummyimage.com/120x185&text=Img 7" alt="Image 7">
  <img src="http://dummyimage.com/120x185&text=Img 8" alt="Image 8">
  <img src="http://dummyimage.com/120x185&text=Img 9" alt="Image 9">
  <img src="http://dummyimage.com/120x185&text=Img 10" alt="Image 10">
  <img src="http://dummyimage.com/120x185&text=Img 11" alt="Image 11">
  <img src="http://dummyimage.com/120x185&text=Img 12" alt="Image 12">
</div>

3 个答案:

答案 0 :(得分:1)

#crossfade {
  height: 185px;
  width: 100%;
  position: relative;
}

#crossfade > img {
  max-width: 30%;
  height: auto;
  opacity: 0;
  z-index: 0;
  animation: imageAnimation 30s linear infinite 0s;
}

#crossfade > img:nth-child(0):nth-child(-n+4) {
  animation-delay: 6s;
}

#crossfade > img:nth-child(n+4):nth-child(-n+7) {
  animation-delay: 12s;
}

#crossfade > img:nth-child(n+7):nth-child(-n+10) {
  animation-delay: 18s;
}

#crossfade > img:nth-child(n+10):nth-child(-n+13) {
  animation-delay: 24s;
}

@keyframes imageAnimation {
  0% {
    opacity: 0;
    animation-timing-function: ease-in;
  }
  8% {
    opacity: 1;
    animation-timing-function: ease-out;
  }
  17% {
    opacity: 1
  }
  25% {
    opacity: 0
  }
  100% {
    opacity: 0
  }
}
<div id="crossfade">
  <img src="http://dummyimage.com/120x185&text=Img 1" alt="Image 1">
  <img src="http://dummyimage.com/120x185&text=Img 2" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 3" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 4" alt="Image 4">
  <img src="http://dummyimage.com/120x185&text=Img 5" alt="Image 5">
  <img src="http://dummyimage.com/120x185&text=Img 6" alt="Image 6">
  <img src="http://dummyimage.com/120x185&text=Img 7" alt="Image 7">
  <img src="http://dummyimage.com/120x185&text=Img 8" alt="Image 8">
  <img src="http://dummyimage.com/120x185&text=Img 9" alt="Image 9">
  <img src="http://dummyimage.com/120x185&text=Img 10" alt="Image 10">
  <img src="http://dummyimage.com/120x185&text=Img 11" alt="Image 11">
  <img src="http://dummyimage.com/120x185&text=Img 12" alt="Image 12">
</div>

您缺少的主要部分是选择器应为Xn+Y

如果我理解正确你需要这样的事情jsfiddle(所有时间都需要10次进行调试)

编辑:

考虑所有评论,new jsfiddle格式为n+X to -n+Y

答案 1 :(得分:1)

我很努力。 但最后我已经实现了&#34; 1&#34;,&#34; 2-3&#34;,&#34; 4-6&#34;,&#34; 6-9&#34;, &#34; 10-12&#34; 即可。

&#13;
&#13;
#crossfade > img {
  max-width: 30%;
  height: auto;
  opacity: 0;
  z-index: 0;
  -webkit-backface-visibility: hidden;
  -webkit-animation: imageAnimation 30s linear infinite 0s;
  -moz-animation: imageAnimation 30s linear infinite 0s;
  -o-animation: imageAnimation 30s linear infinite 0s;
  -ms-animation: imageAnimation 30s linear infinite 0s;
  animation: imageAnimation 30s linear infinite 0s;
}
#crossfade > img:nth-child(-n+12) ~ img:nth-child(-n+9) {
  -webkit-animation-delay: 24s;
  -moz-animation-delay: 24s;
  -o-animation-delay: 24s;
  -ms-animation-delay: 24s;
  animation-delay: 24s;
}
#crossfade > img:nth-child(-n+9) ~ img:nth-child(-n+6) {
  -webkit-animation-delay: 18s;
  -moz-animation-delay: 18s;
  -o-animation-delay: 18s;
  -ms-animation-delay: 18s;
  animation-delay: 18s;
}
#crossfade > img:nth-child(-n+6) ~ img:nth-child(-n+3) {
  -webkit-animation-delay: 12s;
  -moz-animation-delay: 12s;
  -o-animation-delay: 12s;
  -ms-animation-delay: 12s;
  animation-delay: 12s;
}
#crossfade > img:nth-child(-n+3){
  -webkit-animation-delay: 6s;
  -moz-animation-delay: 6s;
  -o-animation-delay: 6s;
  -ms-animation-delay: 6s;
  animation-delay: 6s;
}

@keyframes imageAnimation {
  0% {
    opacity: 0;
    animation-timing-function: ease-in;
  }
  8% {
    opacity: 1;
    animation-timing-function: ease-out;
  }
  17% {
    opacity: 1
  }
  25% {
    opacity: 0
  }
  100% {
    opacity: 0
  }
}
&#13;
<div id="crossfade">
  <img src="http://dummyimage.com/120x185&text=Img 1" alt="Image 1">
  <img src="http://dummyimage.com/120x185&text=Img 2" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 3" alt="Image 2">
  <img src="http://dummyimage.com/120x185&text=Img 4" alt="Image 4">
  <img src="http://dummyimage.com/120x185&text=Img 5" alt="Image 5">
  <img src="http://dummyimage.com/120x185&text=Img 6" alt="Image 6">
  <img src="http://dummyimage.com/120x185&text=Img 7" alt="Image 7">
  <img src="http://dummyimage.com/120x185&text=Img 8" alt="Image 8">
  <img src="http://dummyimage.com/120x185&text=Img 9" alt="Image 9">
  <img src="http://dummyimage.com/120x185&text=Img 10" alt="Image 10">
  <img src="http://dummyimage.com/120x185&text=Img 11" alt="Image 11">
  <img src="http://dummyimage.com/120x185&text=Img 12" alt="Image 12">
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我很感激这已经得到了解答,但是如果它能在未来为任何人提供帮助,那么这就是我的jQuery解决方案。

我对JavaScript代码进行了大量评论,所以应该是自我解释的,但实际上你提供的函数包含显示的img /幻灯片的数量以及显示它们的速度,剩下的就完成了。它是动态的,可以调整奇数幻灯片等。

希望这对任何人都有帮助:))

http://jsfiddle.net/BradChelly/qjtcojfc/3/

&#13;
&#13;
function slideShow(currentSlide){
  // speed at which the slides change in miliseconds (1000 = 1sec)
  // must not exceed total time for the fade in/out animations
  var duration = 3000; 
  // how many slides to show at a time?
  var slidesPerShow = 3;
  
  // count the number of slides (imgs)
  slideCount = $( "#slideshow_images" ).children().length;

  // Array of next slides to be displayed
  slidesToShow = [];
  
  // add the defined number of slides "slidesPerShow" to the slidesToShow array
  var times = slidesPerShow;
  for(var i=0; i < times; i++){
    slidesToShow.push(currentSlide+i+1);
  }
  // set slides array
  slides = [];
	
  // add each slide to the slides array
  $.each( slidesToShow, function( i, val ) {
  		slide = $( "#slideshow_images img:nth-child(" + val + ")" ).clone();
      slides.push(slide);
  });
  
  // provided the current slideshow is not empty
  // fade out its contents, replace it with new slides and fade back in.
  if ( $("#slideshow").children().length > 0 ) {
    $("#slideshow").children().fadeOut("slow", function(){
      $("#slideshow").empty().append(slides)
      $("#slideshow").children().fadeIn(1000);
    });
  }
  // otherwise, if the current slideshow is empty
  // just load the slides straight away. 
	else {
  	$("#slideshow").append(slides);
    $("#slideshow").children().fadeIn(1000);
  }
  
	// set the current slide to the last slide shown or 0 if max slide count reached
  slidesToShow[(slidesPerShow-1)] >= slideCount ? currentSlide = 0 : currentSlide = slidesToShow[(slidesPerShow-1)];
  
  // repeat after set time (set the duration at the top of function)
  setTimeout( function(){ 
  	slideShow(currentSlide);
  }  , duration );
}

// call the slideshow
slideShow(0);
&#13;
#slideshow img {display: none;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<div id="crossfade">
  <div id="slideshow_images" style="display:none;">
    <img src="http://dummyimage.com/120x185&text=Img 1" alt="Image 1">
    <img src="http://dummyimage.com/120x185&text=Img 2" alt="Image 2">
    <img src="http://dummyimage.com/120x185&text=Img 3" alt="Image 2">
    <img src="http://dummyimage.com/120x185&text=Img 4" alt="Image 4">
    <img src="http://dummyimage.com/120x185&text=Img 5" alt="Image 5">
    <img src="http://dummyimage.com/120x185&text=Img 6" alt="Image 6">
    <img src="http://dummyimage.com/120x185&text=Img 7" alt="Image 7">
    <img src="http://dummyimage.com/120x185&text=Img 8" alt="Image 8">
    <img src="http://dummyimage.com/120x185&text=Img 9" alt="Image 9">
    <img src="http://dummyimage.com/120x185&text=Img 10" alt="Image 10">
    <img src="http://dummyimage.com/120x185&text=Img 11" alt="Image 11">
    <img src="http://dummyimage.com/120x185&text=Img 12" alt="Image 12">
    <img src="http://dummyimage.com/120x185&text=Img 13" alt="Image 13">
    <img src="http://dummyimage.com/120x185&text=Img 14" alt="Image 14">
  </div>
  <div id="slideshow"></div>
</div>
&#13;
&#13;
&#13;