Reputation: 1432
http://jsfiddle.net/AndyMP/CkuKe/
It works beautifully, but only when prev/next is clicked. Can it be persuaded to run automatically as well?
Upvotes: 0
Views: 1567
Reputation: 79850
Edit: Updated code to auto slide after clicking on #next/#prev.
Note: After clicking on the #next/#prev
, the autoSlide is called after 2 secs to make.
/* home slide show */
var $slides = $('.slideshow_item');
var slide_pos = 0;
var slide_len = $('.slideshow_item').length;
var slide_int = 0;
$slides.filter(':gt(0)').hide();
autoSlide();
function autoSlide() {
slide_pos = 0;
slide_int = setInterval(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(++slide_pos % slide_len).fadeIn(500);
}, 500);
}
$('#next').click(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(++slide_pos % slide_len).fadeIn(500);
clearInterval(slide_int);
setTimeout(autoSlide, 2000);
});
$('#prev').click(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(--slide_pos % slide_len).fadeIn(500);
clearInterval(slide_int);
setTimeout(autoSlide, 2000);
});
Just add that 2 line of code that you have #next
inside the setInterval.
slide_int = setInterval(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(++slide_pos % slide_len).fadeIn(500);
}, 500);
Upvotes: 1
Reputation: 42450
Here you go. You were mostly correct in calling the click handler every 500ms, but the clearInterval
was stopping it after the first iteration.
/* home slide show */
var $slides = $('.slideshow_item');
var slide_pos = 0;
var slide_len = $('.slideshow_item').length;
$slides.filter(':gt(0)').hide();
slide_int = setInterval(function() {
$('#next').click();
}, 500);
$('#next').click(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(++slide_pos % slide_len).fadeIn(500);
//clearInterval(slide_int);
});
$('#prev').click(function() {
$slides.eq(slide_pos % slide_len).fadeOut(500);
$slides.eq(--slide_pos % slide_len).fadeIn(500);
//clearInterval(slide_int);
});
Upvotes: 1