如何将所有脚本延迟指定的时间
How can I delay ALL scripts for a specified duration?
我正在开发一款严格基于javascript的游戏。我想要的是定期将某些信息打印到屏幕上。够简单吗?对但问题是,我只想延迟一些文本打印到屏幕上的方式(将文本添加到div的innherHTML中)。
我知道setInterval和setTimeout方法,但这些方法的问题在于,它只会延迟在脚本的其余部分继续运行时调用某个函数所需的时间。我想要的是暂停一切,在经过一定的持续时间之前根本不允许javascript前进。
我可以想出一个解决方法——不直接写入innerHTML属性,而是写入一个字符串队列,然后使用setInterval方法在队列中有任何内容等待时显示一行文本。这并不难,但我想知道Javascript是否有任何类型的暂停所有命令可以做同样的事情。目前我正在回避jQuery。
谢谢!
不,根本没有这样的东西。Javascript是异步的,您不能停止其他"线程"。您可以做的是使用一些全局变量或主程序类方法来停止游戏进程
简单的穷人游戏类:
function Game() {
var run = true;
this.pause = function() {
run = false;
}
this.go = function() {
if(run)
return false;
run = true;
heartbeat();
}
function heartbeat() {
/*Do game rendering or whatever you want to pause*/
if(run)
setTimeout(heartbeat, 100); //tick
}
}
您可以使用以下内容"冻结"页面本身:
var start = new Date().getTime(), delay = 5000; // milliseconds
while(new Date().getTime() < start+delay) {}
然而,这也会冻结整个浏览器,通常会导致浏览器崩溃、Windows出现"未响应"框,或出现"此脚本运行需要很长时间,是否终止?"问题。
"正确"的方法是有一个"isPaused"布尔值,你可以打开或关闭它,如果它关闭了,函数就会尝试再次运行。类似这样的东西:
function pauseCheck(thisobj,argobj) {
if( isPaused) {
setTimeout(function() {argobj.callee.apply(thisobj,Array.prototype.slice(argobj,0));},250);
return false;
}
return true;
}
然后在您的其他功能中:
function doSomething(x,y) {
if( pauseCheck(this,arguments)) {
// function body here
}
}
相关文章:
- Javascript中的时间延迟
- Javascript:用于 vs jQuery.each() 与时间延迟
- 如何执行递归函数以重置/维护滚动事件的时间延迟
- 对文件的时间/延迟进行基准测试
- 当每一行都打印成功调用时,需要时间延迟
- 在Javascript中使用时间延迟
- 显示具有时间延迟的动态标签
- 我如何更改<p>使用javascript在定义的时间延迟后动态标记数据
- 如何在考虑页面刷新的固定时间延迟后调用javascript函数
- 是否有可能创建一个节流函数,它可以将另一个函数(也有参数)和时间延迟作为参数
- 而在JS的多线程中,时间延迟出现在流畅的消息调度中
- Mysql命令中的时间延迟
- 我如何添加时间延迟到我的潜水,使他们出现一个接一个像幻灯片一样
- JavaScript图像旋转器时间延迟
- SAPUI5聚合绑定有时间延迟或呈现延迟吗?
- 我如何添加时间延迟到咖啡脚本搜索
- Javascript/JQuery:需要一个时间延迟
- js(折线图)工具提示持续时间/延迟
- jQuery AJAX请求之间的时间延迟
- 为什么我的CSS加载有时间延迟