使用setTimeout跳过第一次出现

时间:2016-09-05 12:45:45

标签: javascript

我希望仅在时间过期后执行console.log();,然后重复,但不会在页面加载后立即执行。这是如何完成的?

function setTimer(t) {
  (function timeout() {
    console.log('timer '+t+' seconds')
    setTimeout(timeout, t*1000);
  })();
}

setTimer(5);
setTimer(10);
setTimer(15);
setTimer(20);

https://jsfiddle.net/y969uLhx/

2 个答案:

答案 0 :(得分:1)

仅使用 setInterval

您可以使用 setInterval ,它会在预定义的时间段内反复执行。以下示例将打印“Hello there'每一秒。

var myID = setInterval(function(){
  console.log('Hello there');
},1000);

要停止setInterval,您需要使用以下内容:

clearInterval(myID);

仅使用 setTimeout

您还可以使用 setTimeout 并调用将自行调用的函数。下面的例子将在1秒后执行 然后重复每一次打印" Hello There"在你的控制台中。

    setTimeout(function(){
      CallMyself();
    },
 // Set the Execution to take place exactly 1000 ms after it has been called.
    1000);

    function CallMyself(){
      console.log('Hello There');
      setTimeout(function(){
        CallMyself();
      },
  // Set the period of each loop to be 1000 ms
     1000);
    }

使用两者合并

您还可以合并 setInterval setTimeOut 。下面的例子将开始打印" Hello There"每秒 1秒过后。

  setTimeout(function(){
    setInterval(function(){
      console.log('Hello there');
    },1000);
  },1000);

将初始延迟和循环延迟作为参数的函数示例,以便您可以创建不同的计时器:

//  First argument is the Delay in Execution. 
//  Second argument is the period it takes for each loop to be completed. 



    setCustomTimer(1 , 2);
    setCustomTimer(2 , 4);
    
    function setCustomTimer( initialDelay , LoopDelay ){
      console.log('Initial Delay of ' + initialDelay + ' Seconds');
      
      var myDelay = LoopDelay;
      
      setTimeout(function(){
        console.log('Initial Delay of ' + initialDelay + ' seconds is Over.      Starting Loop. ');
        CallMyself(myDelay);
      },initialDelay * 1000);
    }
    
    function CallMyself(LoopDelay){
      console.log('Loop every ' + LoopDelay + ' Seconds');
      setTimeout(function(){
        CallMyself(LoopDelay);
      },LoopDelay * 1000);
    }




答案 1 :(得分:0)

以下内容如何:

function MyLoop(t) {
  setTimeout(function() {
    console.log('Loop '+t+' seconds.')
    MyLoop(t);
  }, t * 1000);
}

MyLoop(5);
MyLoop(10);
MyLoop(15);
MyLoop(20);