【问题标题】:SetTimeout functionality not taking placeSetTimeout 功能未发生
【发布时间】:2015-11-17 11:54:20
【问题描述】:

在 a.js 文件中 我有一个名为

的函数
Move(coordinates,callback) {
//Move the cursor from point A to point B based on the coordinates as parameter
});

在 b.js 文件中 我正在调用此函数,因为我希望每 30 秒后看到光标缓慢移动。 这是电话。

for(i=0;i<6;i++)
{
setTimeout(Move(inputcordinates,events = {
  //someevents
}),30000);
}

问题是当页面加载时,函数正在执行并且光标已经移动了6次到该位置, 延迟并没有发生在我眼前,但功能肯定会执行。

上面显示的代码中可能存在什么问题。 我已经将代码增加到大约120000也仍然没有效果。

【问题讨论】:

  • 您正在调用Move() 函数并将其返回值指定为setTimeout 的第一个参数。将其包装在匿名函数 setTimeout(function() { Move(...) }, ... 中。并且您应该在循环的每一轮中调整超时参数。否则所有六个超时将同时触发。类似30000 * (i + 1)

标签: javascript jquery jquery-ui javascript-events


【解决方案1】:

这是因为你直接调用你的函数。你必须这样写:

setTimeout(function() {
    Move(inputcordinates,events = {
       //someevents
    });
}, 30000)

【讨论】:

  • 是的,它是解决方案....但是这里的问题是所有超时都会同时触发。从不是这种情况的问题来看。
  • 正如 Andreas 评论中提到的,将其设为 30000*(i+1)
  • 这会导致间隔之间的时间不一致。这就是为什么我使用设置间隔方法而不是设置超时
【解决方案2】:

您也可以为此使用 setInterval,这很容易实现和清除 尝试如下..

 var i = 0;
 var myVar;
        function getData() {

            myVar = setInterval(function () { Move(x,y)() }, 2000);

        }
        function Move(coordinates,callback){
            i++;
            alert('Hi');
            if (i == 5) {
                alert('5 times');
                clearInterval(myVar);
            }

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2021-12-16
    • 2013-04-04
    相关资源
    最近更新 更多