是否有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);
}
答案 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);
}
答案 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.