私は、それらをクロスフェードすることによってたくさんの画像をアニメーション化する単純な機能を持っています。簡単なバナーの回転。私はanimateSlideshow("play")
を呼び出すように関数を設定して、タイムアウトを設定してアニメーションを開始し、animateSlideshow("stop")
を呼び出すと停止する必要があります。jQuery setTimeout issue
私がstopを呼び出すと、アニメーションがもう一度発生します。この1つの余分なアニメーションの原因は何ですか?どうすれば対処できますか?
これはあなたがかなりのsetTimeout()を使用して関数を呼び出すよりも、するsetIntervalを()/てclearInterval()を使用する必要があります下
function prevSlide(e){
if(curHashIndex !== 0){
$(prevBtn).off();
// Stop the current slideshow
animateSlideshow("stop");
// Reset the current slideshow
$("li.active .rightSlide > li").fadeOut(600).eq(0).fadeIn(600).addClass("actvImg");
$(".rightSlides").animate({
"left" : '+=345'
}, 600, function(){
$(prevBtn).on('click', prevSlide);
});
$(".leftSlides").animate({
"left" : '+=417'
}, 600);
// Activate the new slide
$(".rightSlides li.active").removeClass("active").prev().addClass("active");
activeSlide = $(".rightSlides li.active");
total = $(".rightSlides li.active .rightSlide > li").length;
// Start slideshow on the new slide
var delay = setTimeout(animateSlideshow("play"), 10000);
updateHash();
}
}
function animateSlideshow(action){
if(action === "play"){
$(activeSlide).data('animateSlideshow',
setTimeout(function(){
if($(actvImg).index() === total - 1){
$(actvImg).fadeOut(animationSpeed).removeClass("actvImg").siblings().eq(0).fadeIn(animationSpeed).addClass("actvImg");
}else{
$(actvImg).fadeOut(animationSpeed).removeClass("actvImg").next().fadeIn(animationSpeed).addClass("actvImg");
}
actvImg = $(".rightSlides li.active .rightSlide > li.actvImg");
actvImgIndx = $(actvImg).index();
updateBreadcrumbs();
animateSlideshow("play")
}, animationTimeout)
);
}else{
clearTimeout($(activeSlide).data('animateSlideshow'));
};
};
実際、私にとっては同じ結果が出ています。私は最初に間隔で関数を書きました。 –
少なくとも、setTimeout()でデータを再バインドしないようにする必要があります。この関数を呼び出すかどうかを知る必要があるかもしれません。また、この問題が現れるブラウザがあるかどうかを知る必要があります。 – Scottux
私は最初の投稿を電話をかける機能で更新しました。 –