Reputation: 1779
I have a function animate() that will change a div background many times with a loop. I created another function, animateReverse(), in order to play the image sequency in the reverse order, starting from the last image ending at the first. animate() is working well but animateReverse() isn't working. What am I doing wrong?
function changeImage(index) {
return function() {
var currentImage = './img/1/'+(index+1)+'.jpg';
$('#screen').css('background-image','url('+currentImage+')');
}
}
function animate(){
var numberOfPictures = 17;
for (var i = 0; i < numberOfPictures; i++) {
setTimeout(changeImage(i), i * waitPeriod);
}
};
var waitPeriod = 150;
function animateReverse(){
var numberOfPictures = 17;
for (var i = numberOfPictures - 1; i >= 0; i--) {
setTimeout(changeImage(i), i * waitPeriod);
}
};
Upvotes: 0
Views: 276
Reputation: 1779
Less hard code and finaly the answer:
function changeImage(index,place) {
return function() {
var currentImage = './img/'+place+'/'+(index+1)+'.jpg';
$('.slider').css('background-image','url('+currentImage+')');
}
}
function anime(linear,x) {
changeImage();
// number of pictures
var numberOfPictures = 5;
// time
var waitPeriod = 700;
if(linear == true){
for (var i = 0; i < numberOfPictures; i++) {
setTimeout(changeImage(i,x), i * waitPeriod);
}
} else {
for (var i = numberOfPictures-1; i >= 0; i--) {
setTimeout(changeImage(i,x), (numberOfPictures - i) * waitPeriod);
}
}
};
Upvotes: 0
Reputation: 6090
your loop inside animateReverse()
calls setTimeout()
17 times, in this order:
setTimeout(changeImage(16), 16 * 150);
setTimeout(changeImage(15), 15 * 150);
setTimeout(changeImage(14), 14 * 150);
setTimeout(changeImage(13), 13 * 150);
setTimeout(changeImage(12), 12 * 150);
setTimeout(changeImage(11), 11 * 150);
setTimeout(changeImage(10), 10 * 150);
setTimeout(changeImage(9), 9 * 150);
setTimeout(changeImage(8), 8 * 150);
setTimeout(changeImage(7), 7 * 150);
setTimeout(changeImage(6), 6 * 150);
setTimeout(changeImage(5), 5 * 150);
setTimeout(changeImage(4), 4 * 150);
setTimeout(changeImage(3), 3 * 150);
setTimeout(changeImage(2), 2 * 150);
setTimeout(changeImage(1), 1 * 150);
setTimeout(changeImage(0), 0 * 150);
so of course the timer for image #0 will fire first, then the timer for image #1 next, and so on.
inside animateReverse()
you need to reverse either the image index or the timeout value, but not both.
Upvotes: 1