2011-03-30 78 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); 
});