-3

少し遅れて、4つの異なるコードを次々に実行する必要があります。簡単な睡眠機能を作成するためにこのトリックを思いついたが、それは望ましい結果をもたらさない。

function pauseScript (delay) {
    setTimeout(function() { return true; }, delay);
}

....
//code to be delayed
if (pauseScript(1000)) { 
    document.getElementById("message1").style.visibility='visible'; 
}
...
if (pauseScript(1000)) { 
    document.getElementById("message4").style.visibility='visible'; 
}
//code to be executed after 4 messages are revealed
4

3 に答える 3

3

setTimeoutスクリプトの実行をブロックしません。これを行う必要があります:

setTimeout(function() {
    // code to be delayed
},1000);

あなたの場合、順番に表示するメッセージが4つあるようです。これを試して:

setTimeout(function() {
    var f = arguments.callee;
    f.i = (f.i || 0)+1;
    document.getElementById('message'+f.i).style.visibility = "visible";
    if( f.i < 4) setTimeout(f,1000);
    else {
        // code to be run after all messages are shown.
    }
},1000);
于 2013-03-09T20:20:10.240 に答える
0
function pauseScript(callbacks, delay) {
    for(var i = 0, len = callbacks.length; i < len; i++){
        setTimeout(callbacks[i], (i + 1) * delay);
    }
}

var getMessageDelegates = [
    function(){
        document.getElementById("message1").style.visibility='visible'; 
    },...,
    function(){
        document.getElementById("message4").style.visibility='visible'; 
    }
];

pauseScript(1000, getMessageDelegates);
于 2013-03-09T20:33:58.097 に答える
0

setTimeoutスクリプトを一時停止しません。代わりに、渡された関数が後で非同期に実行されるようにスケジュールします。

私はあなたがこれをやろうとしていると思います:

setTimeout(function(){
    document.getElementById("message1").style.visibility='visible'; 
}, 1000);

setTimeout(function(){
    document.getElementById("message2").style.visibility='visible'; 
}, 2000);

setTimeout(function(){
    document.getElementById("message3").style.visibility='visible'; 
}, 3000);

setTimeout(function(){
    document.getElementById("message4").style.visibility='visible'; 
}, 4000);
于 2013-03-09T20:23:56.597 に答える