Reputation: 71
I have a div with some images
<div class="slides_container">
<div class="slides">
<img src="gif256/3.jpg" data-time="5000" class="myimg"/>
<img src="gif256/4.gif" data-time="3000" class="myimg"/>
<img src="gif256/5.gif" data-time="4000" class="myimg"/>
<img src="gif256/6.gif" data-time="5000" class="myimg"/>
<img src="gif256/3.jpg" data-time="3000" class="myimg"/>
</div>
</div>
I want to slide this images with delay writen in data-time attribute. I use this code
<script type="text/javascript">
$('.slides img:gt(0)').hide();
setInterval(function(){
$('.slides :first-child').fadeOut()
.next('img').fadeIn()
.end().appendTo('.slides');},
5000);
</script>
but this code slides images with same delay(5 sec). How can I use each image's data-time to scroll it? thanks.
Upvotes: 2
Views: 64
Reputation: 1455
You can use setTimeout() and recursion instead of setInterval.
$('.slides img:gt(0)').hide();
changeSlide();
function changeSlide(){
var changeIn = +$('.slides :first-child').data("time");
console.log(changeIn);
setTimeout(function(){
$('.slides :first-child').fadeOut()
.next('img').fadeIn()
.end().appendTo('.slides');
changeSlide();
}, changeIn);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="slides_container">
<div class="slides">
<img src="https://dummyimage.com/300x200/000000/fff" data-time="6000" class="myimg"/>
<img src="https://dummyimage.com/300x200/333333/fff" data-time="2000" class="myimg"/>
<img src="https://dummyimage.com/300x200/666666/fff" data-time="4000" class="myimg"/>
</div>
</div>
Upvotes: 2