有没有jQuery相当于原型的延迟?

时间:2010-09-01 09:49:52

标签: javascript jquery prototypejs

是否有jQuery等同于原型的延迟?

我正在寻找能够延迟执行脚本的内容,直到页面中的所有脚本都完成执行。

谢谢!


第二部分: 有没有办法查看队列中是否有其他setTimeout并延迟执行直到它们触发后?我在评论中看到,有时候setTimeout为0或1并不重要,因为它不可预测哪个会先触发。

再次感谢!

更新回答

我在下面接受的答案中发现了我使用的代码中的错误。切片调用需要在0而不是1上工作,因为在原型核心代码中,它接受额外的参数等待(0.01)。最后的方法变为:

Function.prototype.deferFunc = function() {
   var __method = this, args = Array.prototype.slice.call(arguments, 0);
   return window.setTimeout(function() {
      return __method.apply(__method, args);
   }, 0.01);
}

3 个答案:

答案 0 :(得分:9)

您可以在大多数情况下使用vanilla JavaScript中提供的基本版本setTimeout()

setTimeout(function() {
  //do something
}, 0);

jQuery用于动画的类似排队机制是回调和.delay()函数(下面使用setTimeout())。

答案 1 :(得分:4)

所有defer都执行window.setTimeout内的函数,超时为0。

我可以这样实现它:

Function.prototype.defer = function() {
        var __method = this, args = Array.prototype.slice.call(arguments, 1);
        return window.setTimeout(function() {
          return __method.apply(__method, args);
        }, 0);
      }

Demo

答案 2 :(得分:1)

您可以轻松实现它:

Function.prototype.defer=function() {
    setTimeout(this, 0);
}

这是一个测试:

var testFunc=function() {
    alert('first');
}
testFunc.defer();
alert('second');//first the browser will run this line, then will execute the above defered one.