0

私は次のコードを持っています.正しく動作している場合は、iframeでリンク1を開き、3秒待ってから、iframeでリンク2を開き、3秒待つなど.

現在、配列の最後の値 (最後のリンク) に直接スキップしています。

JS の専門家はいますか?

 <html>
 <head></head>
 <body>

 <a href="http://www.google.com">Google</a><br />
 <a href="http://www.thinkgeek.com">ThinkGeek</a><br />
 <a href="http://www.themetapicture.com">The Meta Picture</a>

 <iframe src="http://www.google.com" id="myid" name="main" width="1024" height="768">
 </iframe>

 <script>
 function getLinksArray() {
     for (var i = 0; i < document.links.length; i++) {
         var linx = document.links[i].href;

         // create a closure for each loop iteration
         (function(linx) {
           setTimeout(function() {
             openLinks(linx);
           }, 3000);
         }(linx));

     }
 }

 function openLinks(link) {
 document.getElementById("myid").src = link;
 }

 window.onload = getLinksArray();
 </script>
 </body>
 </html>
4

3 に答える 3

3

おそらく3000 * i遅延として必要です。そうでない場合は、すべて 3000ms (3 秒) 後に実行されます。これらは連続して実行されるため、最後に認識されるのは 1 つです。

// ...
setTimeout(function(){
  // ...
}, 3000 * i);
// ...
于 2013-02-05T21:49:29.333 に答える
0

ますます長い遅延を作成することなく、このようなことがうまくいくはずです。ただし、両方のパフォーマンスをテストしていないため、どちらが最適かはわかりません。別のオプションを認識していることを確認したかっただけです。

var linx = document.links;
(function loadLink(i) {          
    setTimeout(function () {   
        document.getElementById("myid").src = linx[i].href;
        if(linx[++i])
        {
            loadLink(i);
        }
    }, 3000)
})(0);
于 2013-02-05T22:08:37.517 に答える
0

単純に反復自体を時間指定したい場合があります。

function loadLink(i) {
    document.getElementById("myid").src = document.links[i].href;
    if (i < document.links.length) {
        window.setTimeout(function() { loadLink(i+1) }, 3000);
    }
}

window.onload = loadLink(0);
于 2013-02-05T21:56:45.420 に答える