loop carousel jquery
carousel, infinite, jquery, loops
Solution
Instead of toggling your images that will make the code unreadable and full of z-index changes, just `animate` the `scrollTop` of the container element
- Animate the scrollTop and inside a callback, redo the loop function and:
- reset the scrollTop to 0 and
- remove the first element, appending it `after` the the last one
var $slideShow = $('#slideshow');
function loop() {
$slideShow.stop().animate({
scrollTop: 200
}, 800, 'linear', function() {
$(this).scrollTop(0).find('div:last').after($('div:first', this));
loop(); // Recursion
});
}
loop(); // Start
#slideshow {
width: 200px;
height: 200px;
position: relative;
overflow: hidden;
}
#slideshow img {
display: block;
}
<div id="slideshow">
<div><img src="http://placehold.it/200x200/cf5&text=1" alt=""></div>
<div><img src="http://placehold.it/200x200/f0f&text=2" alt=""></div>
<div><img src="http://placehold.it/200x200/444&text=3" alt=""></div>
<div><img src="http://placehold.it/200x200/f70&text=4" alt=""></div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
Problem
Possible Duplicate: my carousel does not work am a bit puzzled! i got this carousel am creating and i desire that it loops. everything else works out fine, but, when the last image has slid up i want the first one to do the same after it, then the second...infinitely. i have tried many things like appending the first image to the last. i have also tried showing back the images after the last(this one tries but gives an undesirable effect). i need to be shown what tweaks i need to make. thanks big time! ``` var images = $("#slideShow div"); var index = 0; for (i = 0; i < images.length; i++) { $(images[i]).addClass("image-" + i); } setInterval(function() { $(".image-" + (index)).slideUp(1000); if (index < images.length - 1) { index += 1; } else { index = 0; } }, 500); #slideShow { height:20em; width:80%; float:right; } #slideShow div{ line-height:20em; float:right; } #slideShow img{ vertical-align:middle; border:solid 5px #A5A5A5; border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; } <div id="slideShow"> <?php $dir = "carousel"; $dh = opendir($dir); while($slide = readdir($dh)){ $items[] = $slide; } for($i=0; $i<sizeof($items); $i++){ if($items[$i] != "." && $items[$i] != ".."){ $imagePath = $dir."/".$items[$i]; $image = "<div>"."<img src = \"".$imagePath."\""." />"."</div>"; echo $image; } } closedir($dh); ?> </div> ```