3

4 秒ごとに 1 つの配列の内容でアラートを作成するために、setInterval関数を使用したいと思います。jQueryただし、アラートは短時間でアレイのすべての値を表示し、すべての値を表示した後 4 秒間停止します。

$.each(['html5', 'EDM', 'Coca Cola', 'creativity'], function(id,value) {
    setInterval(function(){
        alert(value);
    }, 4000);
});

この場合、次のように表示したいと思います: Alert('html5') - 4 秒 - Alert('EDM') - 4 秒 - Alert('Coca Cola') - 4 秒 - Alert('creativity') - 4 秒 - Alert('html5') - 4 秒 - Alert('EDM') - 4 秒 - ...

4

3 に答える 3

5

setIntervalをループから移動します。

var arr = ['html5', 'EDM', 'Coca Cola', 'creativity'];
var index = 0;
setInterval(function() {
    console.log(arr[index++ % arr.length]);
}, 4000);​

ライブデモ
jQuery は必要ありません。

于 2012-10-13T21:04:09.183 に答える
4

再帰を使用するsetTimeout

var arr = ['html5', 'EDM', 'Coca Cola', 'creativity'];
var alertLoop = function(i) {
    if (arr[i]) {
        alert(arr[i]);
        setTimeout(function(){alertLoop(i+1);}, 4000);
    }
}
alertLoop(0);

デモ: http://jsfiddle.net/B5tJw/

于 2012-10-13T21:06:50.367 に答える
1

の使用setIntervalは推奨されません。説明については、http: //bonsaiden.github.com/JavaScript-Garden/#other.timeoutsを参照してください。

問題を要約するには:

setIntervalページで他に何が起こっているかに関係なく、一定の間隔でイベントを発生させます。

ただし、Javascript はマルチスレッドではありません。一度に 1 つのコード シーケンスしか実行できません。別のコード シーケンスの実行中に がトリガーされた場合setInterval、新しいコード シーケンスは前のコード シーケンスが終了するまでブロックされ、待機します。

これが繰り返し発生すると、多数のイベントが実行待ちになる可能性があります。

alert()メッセージの表示に使用しています。alert()ユーザーがメッセージに応答するまでコード実行シーケンスを一時停止しますが、メッセージをロックしたままにして、他のイベントがそのコードを実行できないようにします。setInterval他の何かがスクリプトをブロックしているかどうかに関係なく、指定された時間に新しいイベントが発生するため、これは特に問題です。

setTimeout解決策は、の代わりに使用することですsetInterval

setTimeoutは一度だけトリガーされますが、独自の関数内で再度トリガーするように簡単に指示できるため、 と同じ効果を得ることができますが、setIntervalより多くの制御が可能です。コードは、 がユーザーに受け入れられるまで待っalert()てから次のイベントをトリガーできます。つまり、 で発生する可能性のあるカスケード イベントの問題は発生しませんsetInterval

物事を説明するのに役立つことを願っています。冒頭で述べたリンクも非常に役立ちます。

于 2012-10-13T21:17:20.963 に答える