2011-03-30 81 views
1

您好我只是想知道我怎麼可以在那一刻全部3張幻燈片,動畫在一個時間延遲如何在JavaScript中的延遲

var currentPosition2 = 1; 
    for(i=0;i<numberOfSlides;i++) { 
     //alert(currentPosition2); 
     currentPosition2 = currentPosition2 + 1; 
     jQuery('#slideInner').animate({ 
      'marginLeft' : slideWidth*(-currentPosition2) 
     });    
    } 

執行的循環中執行一個for循環,我想使每一個環在3秒,3秒的延遲在循環開始之前,

任何幫助,將不勝感激,

感謝

回答

0

作品對我來說:

var numberOfSlides = 5; 
function animateSlides(currentPosition2){ 
    if(currentPosition2 < numberOfSlides){ 
     alert(currentPosition2); 
     currentPosition2 = currentPosition2 + 1; 
     var foo = (function(pos){ 
      return function(){ 
       animateSlides(pos); 
      }; 
     })(currentPosition2); 
     setTimeout(foo, 3000); 
    } 
} 

animateSlides(1); 
2

退房jQuery's .delay(),我認爲它做到了你想要的。否則,setTimeout可能就是要走的路。

+0

感謝您的答覆,但我需要停下來時,一些人試圖手動更改幻燈片 – amir 2011-03-30 13:33:52

+0

是定時器,setTimeout的是我需要的,但我只是不似乎能夠適應它for循環,任何幫助將不勝感激 – amir 2011-03-30 13:35:09

+0

@amir你的意思是「手動更改幻燈片」?在這種情況下是否有JS碼運行? – 2011-03-30 13:35:45

0

我會把for循環變成一個遞歸函數。我不確定你在用currentPosition2做什麼,所以這可能會有一個錯誤。

var currentPosition2 = 1; 

function animateSlide() { 
    // Set manualClickHappened to true if the user clicks a slide 
    if (manualClickHappened) { 
    return; 
    } 
    currentPosition2++; 
    jQuery('#slideInner').animate({ 
    'marginLeft': slideWidth * (-currentPosition2) 
    }); 
    if (currentPosition2 < numberOfSlides + 2) // Possible off-by-one 
    window.setTimeout(animateSlide, 3 * 1000); 
    } 
} 

window.setTimeout(animateSlide, 3 * 1000); 
+0

感謝您的回覆,currentPosition是幻燈片的currentPosition,它隨着幻燈片動畫到下一個而增加。 – amir 2011-03-30 13:40:51

0

也許,大概是這樣的。儘管如此,應該更好地清理runningIntervals的清除時間間隔。

var currentPosition2 = 1; 
var runningTimeouts = {}; 

var secondsBetween; 

    for(i=0;i<numberOfSlides;i++) { 
     //alert(currentPosition2); 
     var j = i; // use j, if you need i inside the closure (otherwise it wouldn't work) 
     var id = setTimeout(function() { 
      currentPosition2 = currentPosition2 + 1; 
      jQuery('#slideInner').animate({ 
       'marginLeft' : slideWidth*(-currentPosition2) 
      });     
     }, (i+1)*secondsBetween); 
     runningTimeouts[i] = id; 
    } 
// then use runningTimeouts to kill timeouts prematurely 
// clearTimeout(runningTimeouts[someKey]) 
0

使用現有的代碼,你需要的是:

var arrTimers = []; 
for(var i = 0; i < numberOfSlides; i++) { 
    //alert(currentPosition2); 
    currentPosition2++; 
    arrTimers.push(window.setTimeout(function() { 
     jQuery('#slideInner').animate({ 
      'marginLeft' : slideWidth*(-currentPosition2) 
     }); 
    }, i * 1000)); 
} 

這將導致瞬間發生的第一個動畫,第二個1秒後出現2秒等

後第三

要停止特定計時器使用這樣的代碼:

window.clearTimeout(arrTimers[2]); 

這例如將防止第三發生的動畫。

要清除所有的計時器:

$.each(arrTimers, function(index, value) { 
    window.clearTimeout(value); 
});