ClearIterval - 何かのアミス
-
12-12-2019 - |
質問
全員がクリアインターバルに問題があるようです。私は人々が矢印をクリックすることを人々に渡すことを可能にするスライダーを作りました。バナーは数秒も回転します。誰かが矢印の1つをクリックした後に自動回転をオフにすることができます。
これが私のコードです:
$(function(){
var intvl = 0;
intvl = setInterval(heroTransitionNext, 2000);
$('.rightArrow').click(function(){
window.clearInterval(intvl);
});
});
.
編集:
これは呼び出し中の機能です:
function heroTransitionNext() {
$('.HP-hero li').filter(':visible').fadeOut('normal', function () {
if ($(this).next().length != 0) {
activeZone = parseInt(activeZone) + 1;
$(this).next().fadeIn('normal', heroNavHighlight(activeZone));
} else {
activeZone = 1;
$('.HP-hero li:first-child').fadeIn('normal', heroNavHighlight(activeZone));
}
$(this).hide();
});
};
. 解決
アニメーションを停止するには、jquery
の.stop()
を使用できますが、問題を解決するかどうかわからないかどうかわからない(視覚化されませんでした)が試してみることができます
$('.HP-hero li').stop(1,1); // or try $('.HP-hero li').stop()
window.clearInterval(intvl);
.
say2joe
は、clearInterval
が次回の関数を起動するだけでなく、現在のキューを消去するだけではありません(彼は正しい)ので、その場合はstop
を使用できます。
他のヒント
HerotransitionNext関数がどのくらいの機能に応じて、間隔がクリアされていても実行中である可能性があります。つまり、間隔をクリアすると、関数が呼び出されるのを停止します - しかし、関数のいずれかのインスタンス(S)メモリ内で実行されると、終了するまで実行が続きます。
より明確になるには、ここにユースケースがあります(FirebugやDeveloper Toolsのプロファイラーを使用して自分自身をチェックすることができます):
HerotransitionNext実行時間は2.1秒です。 SetIntervalが呼び出されてから6.1秒後にClearIntervalが呼び出されます。 6.1秒で、HerotransitionNextが4回呼び出されました。ただし、最初の3つの実行が完了しましたが、4番目は実行が終了するまで完了しません(SetIntervalが呼び出されてから8.1秒)。注:このユースケースでは、最後の呼び出しの実行がまだ継続している間に連続した各呼び出しが実行されます(100 MSの場合) - もうすぐ2から2.1,4から4.1、および6から6までの実行が重複しています。 6.1秒間隔。
インターバルセットよりも実行に時間がかかる場合は、setTimeout()で再帰関数を使用してください。次のリンクはあなたに良い例を与えます。
また、説明の良い参照は