I have a problem with animation delay on CSS Animation. I have 3 images and I want to make it slideshow. The illustrations is, image 1 to image 2 takes 15 seconds to change and image 2 to image 3 takes 15 seconds to change and image 3 back to image 1 it takes 30 seconds, after the first loop, I want to make the slideshow end in image 3 so image 1 to image 2 still 15 seconds and image 2 to image 3 still 15 seconds and when image 3 load it no need to back to image 1. I tried this code but it gives me 15 seconds delay to all images. This is my code :
ul {
list-style: none;
margin: 0;
padding: 0;
position: relative;
}
li {
position: absolute;
opacity:0;
}
li {
animation: xfade 45s infinite;
}
li:nth-child(2) {
animation-delay:15s;
}
li:nth-child(3) {
animation-delay:30s;
}
@keyframes xfade{
3%{opacity:1}
33% {opacity:1;}
36%{opacity:0}
}
<ul>
<li><img width="500" height="500" src="http://lorempixel.com/500/500/sports" alt="pic1"></li>
<li><img width="500" height="500" src="http://lorempixel.com/500/500/people" alt="pic2"></li>
<li><img width="500" height="500" src="http://lorempixel.com/500/500/transport" alt="pic3"></li>
</ul>
I want to make delay in my animation according the illustrations above. Anyone could help me solve this problem ? Thank you before.
I am thinking that using GreenSock is better if you want animation with specific scenario like this.
Here is the closest I can get with HTML and CSS, I also need to duplicate the <li>
to fit your scenario.
ul {
list-style: none;
margin: 0;
padding: 0;
position: relative;
}
li {
position: absolute;
opacity: 0;
}
li:nth-child(6) {
/*The last item always on the top, direction will goes from last to first*/
animation: xfade 15s;
}
li:nth-child(5) {
/*Put animation length double the delay (in this case delay is the actual animation length)*/
animation: xfade 30s 15s;
}
li:nth-child(4) {
animation: xfade 30s 15s;
}
li:nth-child(3) {
animation: xfade 30s 15s;
}
li:nth-child(2) {
animation: xfade 30s 15s;
}
li:nth-child(1) {
opacity: 1;
}
@keyframes xfade{
0%{opacity:0}
33% {opacity:1;}
100%{opacity:0}
}
<ul>
<li>1<img width="500" height="500" src="http://lorempixel.com/500/500/sports" alt="pic1"></li>
<li>2<img width="500" height="500" src="http://lorempixel.com/500/500/people" alt="pic2"></li>
<li>3<img width="500" height="500" src="http://lorempixel.com/500/500/transport" alt="pic3"></li>
<!-- Duplicate -->
<li>4<img width="500" height="500" src="http://lorempixel.com/500/500/sports" alt="pic1"></li>
<li>5<img width="500" height="500" src="http://lorempixel.com/500/500/people" alt="pic2"></li>
<li>6<img width="500" height="500" src="http://lorempixel.com/500/500/transport" alt="pic3"></li>
</ul>
Here's something that gave real food for thought :)
I had to apply 2 animations for opacity change: xfade-25pct
and xfade-50pct
. Both play only 2 times, fading out briefly after 25% and 50% of the animation. And an additional show
animation to make the 3rd image stick after 2 animation loops, with the necessary rule animation-fill-mode: forwards;
.
The trick to opacity is this: you have to split the animation in 4 quarters. If you want you can change the total animation duration from 60s
to a multiple of 4, and adjust the delays. The 3rd animation delay is the double of the 2nd one.
----#----#----#----#----#----#----#----#----#----#
1st animation | 1st animation |
--------------------------------------------------
15s | 2nd animation | 2nd animation |
--------------------------------------------------
30s | 3rd animation | 3rd animation |
----#----#----#----#----#----#----#----#----#----#
Feel free to ask. Hope this helps you.
var s = 0,
c = 1;
/* Code for displaying timer */
window.setInterval(function() {
s++;
document.querySelector('DIV').innerHTML = s;
if (s == 15 && c <= 2 || s == 30) {
if (s == 30) {
c = 1;
} else {
c++;
}
s = 0;
}
}, 1000);
ul {
list-style: none;
margin: 0;
padding: 0;
position: relative;
}
li {
position: absolute;
opacity: 0;
}
li {
animation: xfade-25pct 60s 2;
}
li:nth-child(2) {
animation-delay: 15s;
}
li:nth-child(3) {
animation-delay: 30s, 120s;
animation-name: xfade-50pct, show;
animation-duration: 60s, 1s;
animation-iteration-count: 2, 1;
animation-fill-mode: forwards;
}
@keyframes xfade-25pct {
0% {
opacity: 0;
}
2%,
25% {
opacity: 1;
}
27% {
opacity: 0;
}
}
@keyframes xfade-50pct {
0% {
opacity: 0;
}
2%,
50% {
opacity: 1;
}
52% {
opacity: 0;
}
}
@keyframes show {
0%,
100% {
opacity: 1;
}
}
<DIV></DIV>
<ul>
<li><img width="500" height="500" src="https://www.noao.edu/image_gallery/images/d2/pelican_500.jpg" alt="pic1"></li>
<li><img width="500" height="500" src="http://whc.unesco.org/uploads/thumbs/news_920-500-500-20151015155516.jpg" alt="pic2"></li>
<li><img width="500" height="500" src="https://i.pinimg.com/736x/4c/17/65/4c176537aee906de294138c3bac5b8f5--merry-christmas-love-coffee-aroma.jpg" alt="pic3"></li>
</ul>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With