0

私は一時停止して再生するのに問題があり、 setIntervalIclearIntervalvar = setInterval(func,time)、間隔でインスタンスを乗算し、ティックごとに 2 func を呼び出し始めます。

これは、動作しない例のjsfiddleですhttp://jsfiddle.net/wZWWT/

コードは次のとおりです。

function test() {
 $(".container").append("<div>Inserted text</div>");   
}

var timer = setInterval(test,2000);

$(".container").on("mouseenter mouseover",function(){
    clearInterval(timer);
}).on("mouseleave mouseout",function(){
    timer = setInterval(test,2000);
})
4

2 に答える 2

2

理にかなっています。Mouseleave と mouseout は、2 つの異なるイベントです。これで、2 つの間隔が作成されました。

新しい間隔を作成しても、古い間隔は破棄されません。参照を保存しなくても動作し続けます

新しい間隔を設定する前に、別の間隔が実行されているかどうかを確認してください。

$(".container").on("mouseenter mouseover",function(){
    clearInterval(timer);
}).on("mouseleave",function(){
    if ( !timer ) timer = setInterval(test,2000);
}).on("mouseout",function(){
    if ( !timer ) timer = setInterval(test,2000);
})
于 2013-05-24T18:08:40.947 に答える
1

timer、実際には を表す単なる整数ですsetInterval()setInterval()新しいものを割り当てるtimerと、新しいものの ID が割り当てられますsetInterval()が、古いものはキャンセルされず、ID が上書きされたままにするための ID がわかりません。

あなたのコードでは、on()両方が呼び出されています- 両方が起動していますが、最後に実行したもののIDのみが変数に設定されているため、呼び出されたときに(2回ですが、実際には害はありません)、そのうちの 1 つだけをキャンセルします。mouseentermouseovertimermouseleave/mouseout

于 2013-05-24T18:12:12.560 に答える