我正在尝试使用 css 动画一次显示 3 张图像(目前为 12 张)。我想先显示图像 1-3,然后显示 4-6,然后显示 7-9,然后显示 10-12。
到目前为止,我有这个,但我无法弄清楚如何使用 :nth 选择器在隐藏其余部分的同时显示下一个 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
}
}
下面的示例[或单击此处查看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>
感激这个问题已经得到了回答,但如果将来对任何人有帮助,这是我的jQuery解决方案。
我已经对 JavaScript 代码进行了大量评论,所以应该是不言自明的,但实际上您为函数提供了要显示的 img/幻灯片的数量以及显示它们的速度,其余的都由它完成。它是一个动态的,将针对奇数张幻灯片等进行调整。
希望这对某人有所帮助:)
http://jsfiddle.net/BradChelly/qjtcojfc/3/
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);
#slideshow img {display: none;}
<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>
我正在尝试很多。但最终我实现了"1","2-3","4-6","6-9","10-12"。
#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
}
}
<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>
#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 进行调试)
编辑:
考虑到所有评论,这个新的 jsfiddle 具有n+X to -n+Y
格式。