jQuery可以用作sleep()或wait()函数吗?等待后挂起语句的执行。我尝试$()。delay(5000),但是没有5秒的等待。 delay()仅用于效果吗?
我不是在寻找涉及setTimeout延迟执行另一个功能或占用CPU的解决方案的解决方案。我想要一个可在不同脚本中重用的sleep()函数。
加成:
我并不是要提出一个根本不使用setTimeout的解决方案。我已经看到了一些解决方案,这些解决方案需要将所有需要延迟的代码移到其自己的函数中,以便setTimeout可以调用它。我不要可以使用setTimeout的自包含包装函数,也可以在虚拟的非视觉效果中使用jQuery delay(),仅用于模拟sleep函数。
最佳答案
Javascript(以及扩展名jQuery)没有真正的“睡眠”功能。您可以或多或少地滥用setTimeout和setInterval(以及它们的派生,例如延迟)来模拟睡眠,但是通常最好还是适应setInterval / Timeout的工作方式...弄清楚您想做什么,密封在函数中关闭它,并将其作为参数传递给这两个函数之一。
编辑:
好的,我看到了您的修改。您确实想要常规的睡眠功能。接下来的事情绝对是一种滥用,而不是我所建议的。但是,如果我必须构建一个以挽救生命,就可以这样做:测试大量的循环周期需要多长时间,进行大量统计上的测试,取平均结果,并使用该信息来定义该函数将给定的毫秒数大致转换为多个循环周期,然后循环运行。
在JavaScript中:
function timeloop(cycles) {
var start = new Date().getTime();
for(var j=0; j<cycles; j++);
var end = new Date().getTime();
return end-start;
}
var sleep = (function () {
var ms_tally = 0, i, s = 100, L = 10000;
for(i=0; i<s; i++)
ms_tally += timeloop(L);
var avg = ms_tally / i;
var ms_per_cycle = avg / L;
var cycles_per_ms = 1 / ms_per_cycle;
return eval('function (ms) { for(var k=0, z=ms*'+cycles_per_ms+'; k<z; k++); }');
})()
不过,我不会相信自己的生活,健康状况,甚至无法相信20美元的时间安排。如果您需要精确度超过半秒的精度,那么在JavaScript中执行此操作的正确方法是信任内置在您正在使用的任何环境中的设施...以及浏览器中的setInterval和setTimeout。
编辑#2:
我在评论之一中看到了对Ben Alman's doTimeout plugin的建议。仔细观察之后,值得注意的是,这比我上面几乎在所有方面产生的可憎都更好。它不是我们通常习惯的舒适的
sleep
-y语法,您仍然必须以某种边际的方式考虑函数中的代码,但是至少您仍然可以保持顺序感。如果您无法直接使用setTimeout / Interval,请使用doTimeout或类似的方法。