在Javascript中每五秒钟循环一次

在Javascript中每五秒钟循环一次,javascript,jquery,loops,delay,settimeout,Javascript,Jquery,Loops,Delay,Settimeout,我正在尝试用JS(或JQuery)编写一个简单的循环,每5秒更新一个映像,总共15秒(三个循环),然后退出 应该是这样的: 等五秒钟 执行 等五秒钟 执行 等五秒钟 执行 退出 但是setTimeout似乎只工作一次 作为测试,我尝试了: function doSetTimeout(i) { setTimeout(function() { alert(i); }, 5000); } for (var i = 1; i <= 5; ++i) doSetTimeout(i); 函数

我正在尝试用JS(或JQuery)编写一个简单的循环,每5秒更新一个映像,总共15秒(三个循环),然后退出

应该是这样的:

  • 等五秒钟
  • 执行
  • 等五秒钟
  • 执行
  • 等五秒钟
  • 执行
  • 退出
  • 但是
    setTimeout
    似乎只工作一次

    作为测试,我尝试了:

    function doSetTimeout(i) {
      setTimeout(function() { alert(i); }, 5000);
    }
    
    for (var i = 1; i <= 5; ++i)
      doSetTimeout(i);
    
    函数doSetTimeout(i){
    setTimeout(函数(){alert(i);},5000);
    }
    对于(var i=1;i您希望使用setInterval()


    假设您正在使用jQuery(操作DOM)

    您可以尝试以下方法:

    ['img1.jpg', 'img2.jpg', 'img3.jpg'].forEach(function(imgPath, index) {
        // the callback will be executed in 5seconds * (index + 1)
        setTimeout(function() {
           // change image source
           $('img#myImage').attr('src', imgPath);
        }, 5000 * (index + 1));
    });
    
    设置超时时:

    function doSetTimeout(i) {
        if(i >= 3) return;
        alert(i);
        setTimeout((function () {
            return function () {
                doSetTimeout(i);
            };
        })(i + 1), 5000);
    }
    
    doSetTimeout(0);
    

    但是您也可以使用setInterval,可能更合适。

    原因是您的settimeout在同一时间(5秒后)结束,因为您的超时代码基于5秒

    for(var i = 1; i <= 5; i++) {
        (function(index) {
            setTimeout(function() { alert(index); }, 5000);
        })(i);
    }
    
    for(var i=1;i
    var time=1;
    var interval=setInterval(函数(){
    
    如果(时间您可以使用
    setInterval
    代替,并跟踪您执行函数的次数。而不仅仅是使用
    clearInterval()
    停止执行

    var i=1;
    var interval=setInterval(函数(){
    执行();
    }, 5000);
    $(文档).ready(函数(){
    执行();
    });
    函数execute(){
    $(“#输出”).append(“set
    ”); 如果(i==3){ 间隔时间; } i++; }

    您的第一个示例就快到了。您只需将时间延迟乘以循环索引即可获得正确的延迟

    function doSetTimeout(i) {
      setTimeout(function() { alert(i); }, 5000*i);
    }
    
    for (var i = 1; i <= 3; ++i)
      doSetTimeout(i);
    
    函数doSetTimeout(i){
    setTimeout(函数(){alert(i);},5000*i);
    }
    
    对于(var i=1;i使它变得简单!您不需要循环,只需要执行三次

    setTimeout(function() { alert(1); }, 5000);
    setTimeout(function() { alert(2); }, 10000);
    setTimeout(function() { alert(3); }, 15000);
    
    但是,如果您确实想要一个循环:

    function doSetTimeout(i) {
        setTimeout(function() { alert(i); }, i*5000);
    }
    for (var i = 1; i <= 3; ++i)
        doSetTimeout(i);
    
    函数doSetTimeout(i){
    setTimeout(函数(){alert(i);},i*5000);
    }
    
    对于(var i=1;i您正在查找的
    setInterval(function(){…},5000)
    您可以将该间隔存储在变量中,并在满足特定条件后将其清除…在您的情况下,在第五次迭代之后,
    var i=1;i@KyleK它也不会更改图像。正如我所说的,这些只是测试循环。它将执行无限时间!这很有意义。非常感谢。@Chuck请注意设置多次时间一次使用rs是一种不好的做法。你应该在递归函数中设置一个计时器。@Karl AndréGagnon我想我可以
    clearTimeout
    3个?或者在每个循环之后?@Chuck不不不,不是关于清除超时,而是让3个计时器同时运行。一个持续500毫秒,一个持续1000毫秒,一个持续1500毫秒。你应该等到1个计时器在触发另一个之前完成,就像这样:@Karl AndréGagnon啊,是的,我现在明白你的意思了。这很有意义,而且确实是我一直在寻找的答案。谢谢!你如何在对象方法上使用setInterval?因此在
    var interval={}
    中,这是许多解决方案中唯一对我有效的。谢谢。
    var time = 1;
    
    var interval = setInterval(function() { 
       if (time <= 3) { 
          alert(time);
          time++;
       }
       else { 
          clearInterval(interval);
       }
    }, 5000);
    
    function doSetTimeout(i) {
      setTimeout(function() { alert(i); }, 5000*i);
    }
    
    for (var i = 1; i <= 3; ++i)
      doSetTimeout(i);
    
    setTimeout(function() { alert(1); }, 5000);
    setTimeout(function() { alert(2); }, 10000);
    setTimeout(function() { alert(3); }, 15000);
    
    function doSetTimeout(i) {
        setTimeout(function() { alert(i); }, i*5000);
    }
    for (var i = 1; i <= 3; ++i)
        doSetTimeout(i);