【问题标题】:loop through settimeout with stetimeout function in jquery在 jquery 中使用 stetimeout 函数循环 settimeout
【发布时间】:2018-03-09 07:54:15
【问题描述】:

不确定这是否是最好的方法,但这是我正在尝试的:

示例代码:

$("#someElement").mouseout(function() {
    var firstLoop = setTimeout(function() {
        //do something
    }, 2000);

    setTimeout(function() {
        //do something else
    }, 4000);

    var timer = 1000;
    setTimeout(firstLoop, timer); //this doesn't works
});

我正在尝试无限循环。

【问题讨论】:

  • 可能是错字? timeout?
  • 您是在寻找setInterval 吗?
  • 对不起,错字只是我的问题。
  • @Striped 也尝试过setInterval。没用。
  • 你的目标是什么?

标签: javascript jquery loops settimeout


【解决方案1】:

setTimeout(firstLoop, timer); //这不起作用

因为setTimeout (firstLoop) 没有返回setTimeout 期望的函数引用。

做起来

var firstLoop = function(){ 
  setTimeout(function() {
    //do something
  }, 2000);
}

来自您的评论

@arnoldemzi 的目标是在两个超时的情况下无限循环,所以, 第一个函数然后第二个然后第一个然后第二个..等等。

只需使用setInterval

$("#someElement").mouseout(function() {
    var firstLoop = function() {
        console.log( "something" );
    };

    setTimeout(function() {
        //do something else
    }, 4000);

    var timer = 1000;
    setInterval(firstLoop, timer); //this doesn't works
});

【讨论】:

  • 供您编辑:setInterval 也会调用 setTimeout 吗?
  • @Saurabh 不,没有理由这样做。如果您正在寻找无限循环,请使用setInterval 保持简单。
  • 太棒了,明白了。
【解决方案2】:

如果您想在某个时间间隔内重复某些内容,您可以使用 setInterval,并将您想重复的函数以及以毫秒为单位的时间间隔传递给它。

我已经稍微更改了您的代码以证明这一点:

$('button').click(function() {

    var firstLoop = function() {
        console.log('first')
    };

    setTimeout(function() {
        console.log('second')
    }, 4000);

    var timer = 1000;
    setInterval(firstLoop, timer);
});

在这里查看一个工作小提琴:https://jsfiddle.net/hgnm1mph/3/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多