是否有等效的Javascript或Jquery睡眠function?
我想在javascript中使用这样的东西。
for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); }
是否内置了Javascript或Jquery?
谢谢!
直接没有这样的事情。 你必须告诉javascript使用setTimeout
在一段时间后唤醒’某事’。
当然,这个’某事’就是你计划在睡眠后执行的代码。
从我在互联网上找到的一个例子:
function dothingswithsleep( part ) { if( part == 0 ) { alert( "before sleep" ); setTimeout( function() { dothingswithsleep( 1 ); }, 1000 ); } else if( part == 1 ) { alert( "after sleep" ); } }
但那是脆弱的设计。 您最好重新考虑您的业务逻辑,以便在一秒钟后真正做一些事情 :调用不同的函数而不是使用这些设计的辅助变量。
使用
的setTimeout
方法
第一个问题,为什么你想在一个循环内睡觉? 如果需要,可能应该建立一个事件系统。 我本人已多次尝试睡眠策略进行multithreadingjavascript编程,发现它不能正常工作。 在javascript中执行multithreading的最佳方法是使用YUI或几乎任何其他框架提供的事件系统。 让您的听众订阅此事件并在发生时执行某些操作。 在这些事件框架中,您可以完全控制自己的自定义事件何时触发,因此它们没什么大不了的。
这是YUI事件框架的链接。
http://developer.yahoo.com/yui/examples/event/index.html
以下是使用YUI编码的方法
var myEvent = new YAHOO.util.CustomEvent('fooEvent'); // subscribe a function to be called (first param) inside the scope of an object // (second param). myEvent.subscribe(function() {alert(this.count++);},{count:0},true); setTimeout('myEvent.fire()',1000);
这样做的方式更清洁,更紧凑。 或者,如果您不想使用事件框架,请尝试此操作
var myObj = { count:0, doSomething:function(){alert(this.count++);} loopFunc:function(){ this.doSomething(); setTimeout('myObj.loopFunc()',1000); } }
这提供了您所需要的,更紧凑。
但是,如果您的代码中确实必须具有睡眠function,那么我建议对简单的服务器端脚本进行同步ajax调用。 然后,如果您愿意,可以使用服务器上的代码进行hibernate。 以下是此处发布的问题的链接,其中显示了如何进行同步通话。
如何让jQuery执行同步而非异步的Ajax请求?
但我强烈建议你去setTimeout方式。 更清洁,如果你可以避免它,你可能不想做任何服务器端调用。
我已经在javascript sleep / wait上搜索/搜索了不少网页……如果你想让javascript“运行,延迟,运行”,没有答案……大多数人得到的也是“RUN,RUN(无用)东西),运行“或”运行,运行+延迟运行“….
所以我吃了一些汉堡并且开始思考::这里有一个有效的解决方案……但你必须砍掉你的运行代码… :::
// ………………………………….. // example1:
DISPLAY
// ……………………………… // example2:
DISPLAY
我看到这个评论“我尝试过使用setTimeout,但我不需要延续function”并且想,是的,你做到了。 你不需要的是一个循环。 你需要一个递归函数。
这个
for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); }
翻译成这个
function recursive( i, max ) { if ( i > max ) return; alert( i ); i = i + 1; setTimeout( function(){ recursive(i, max); }, 1000 ); } recursive(1, 10);
示例: http : //jsfiddle.net/q76Qa/
好吧,如果你在网络服务器上安装了PHP,你可以使用$.load
或类似的方法调用一个只有sleep(int)
的PHP文件…
function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime() < start + delay); }