jQueryでautplayを使って簡単なスライダを作成しました。自動再生が有効な場合は、関数を指すsetTimeoutが設定されます。この関数は、それ自体に再帰的なsetTimeoutを持ちます。アニメーションのクロムタイムアウト問題
クロムを除くすべてがうまく動作します。私はタブを変更して、しばらく待って戻って、スライダーが怒っている。タイムアウトの複数のインスタンスがアクティブであるように見えますが、タイムアウトを同じ変数に指定しているので、そうではありません。
いくつかの関連するコード:
var timer;
function autoplay() {
currentPosition++;
if(currentPosition == numberOfSlides) {
// last slide
currentPosition = 0;
}
manageNavigation(currentPosition);
// Hide/show controls
manageControls(currentPosition);
// animate the slides
slideshowAnimate();
// set timer
if(autoplay_enable) {
//clearTimeout(timer);
timer = setTimeout(function() { autoplay() }, interval*1000)
}
}
function setTimer() {
if(autoplay_enable) {
timer = setTimeout(function() { autoplay() }, interval*1000)
}
}
setTimer();
私はこのコードが意味論的にのみ異なると思います。元のコードをこのように変更すると、タブ変更後にChromeが失敗し、後でタブに戻ります。 –
実際に追加する必要があるのは、clearTimeoutだけです。あなたのスタートアップ状態に関するいくつかの問題があるようです。私はこのすべてがグローバルであるか、単一のスタートアップクロージャでラップされると期待していますか? –