SORU
27 AĞUSTOS 2010, Cuma


Nasıl bir JavaScript döngü bir gecikme eklerim?

while bir döngü içinde uyu/bir gecikme eklemek istiyorum:

Bu gibi çalıştım:

alert('hi');

for(var start = 1; start < 10; start  ) {
  setTimeout(function () {
    alert('hello');
  }, 3000);
}

alert('hi'), 3 saniye sonra alert('hello') bekliyor olacak gösteren görüntülenir ama o alert('hello') art arda sürekli olacak sonra. doğrudur ilk senaryo sadece:

İstiyorum alert('hello') 3 saniye alert('hi') sonra gösterilir sonra ikinci kez 3 saniye alert('hello') ve beklemek gerekiyor.

Herkes tavsiye verebilir mi?

Şimdiden teşekkürler.

CEVAP
27 AĞUSTOS 2010, Cuma


setTimeout() işlevi olmayan engelliyor ve hemen geri dönecek. Bu nedenle döngü çok hızlı bir şekilde yineleme ve 3 saniyelik bir zaman aşımı hızlı bir şekilde birbiri ardına tetikler başlatacaktır. İlk uyarılarınızı kadar 3 saniye sonra pop neden olur, ve diğerleri herhangi bir gecikme olmadan arka arkaya izleyin.

Böyle bir şey yerine kullanmak isteyebilirsiniz:

var i = 1;                     //  set your counter to 1

function myLoop () {           //  create a loop function
   setTimeout(function () {    //  call a 3s setTimeout when the loop is called
      alert('hello');          //  your code here
      i  ;                     //  increment the counter
      if (i < 10) {            //  if the counter < 10, call the loop function
         myLoop();             //  ..  again which will trigger another 
      }                        //  ..  setTimeout()
   }, 3000)
}

myLoop();                      //  start the loop

Ayrıca, kendi kendine fonksiyon çağırma kullanarak, bağımsız değişken olarak yineleme sayısı geçen neaten.

(function myLoop (i) {          
   setTimeout(function () {   
      alert('hello');          //  your code here                
      if (--i) myLoop(i);      //  decrement i and call myLoop again if i > 0
   }, 3000)
})(10);                        //  pass the number of iterations as an argument

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • TROPFEST

    TROPFEST

    27 Mart 2007