暂停Javascript ||冻结页面
Pause Javascript || Freeze page
我想知道是否有一些解决我的"问题"的方法。
我玩了一个游戏,我用Javascript/jQuery通过Greasemonkey/Firefox定制。
有很多脚本可以修改DOM和一些输入值。在我的自定义脚本上,我使用一个ajax调用,需要大约15-20秒才能完成,但到那时页面被修改,所以我到了这里。我想我必须以某种方式停止一切,所有的javascript,完全冻结页面,直到我的ajax完成,但请记住,我不能控制/修改页面上的所有脚本。从我的经验来看……一切皆有可能,我错了吗?..谢谢你。
很抱歉,即使已经有一段时间了,但你发布的情况比我想象的更吸引我的注意。所以我检查了很多可能性,最后我建议如下:
var _setTimeout;
var _clearTimeout;
var _setInterval;
var _clearInterval;
var _pauseOn;
_setTimeout = window.setTimeout;
_clearTimeout = window.clearTimeout;
_setInterval = window.setInterval;
_clearInterval = window.clearInterval;
_pauseOn = false;
window.setTimeout = function(code, delay) {
return _setTimeout(function () {
if (_pauseOn == true) {
return;
}
code();
}, delay);
};
window.clearTimeout = function(intervalId) {
if (_pauseOn == true) {
return;
}
_clearTimeout(intervalId);
};
window.setInterval = function(code, delay) {
return _setInterval(function () {
if (_pauseOn == true) {
return;
}
code();
}, delay);
};
window.clearInterval = function(intervalId) {
if (_pauseOn == true) {
return;
}
_clearInterval(intervalId);
};
function pauseTimer() {
_pauseOn = true;
}
function resumeTimer() {
_pauseOn = false;
}
/*
* To test:
* shift + p --> pause game
* shift + r --> resume game
*/
$(window).keypress(function(event) {
if (event.shiftKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 'p':
event.preventDefault();
pauseTimer();
break;
case 'r':
event.preventDefault();
resumeTimer();
break;
}
}
});
我希望你能理解。
p。你可以在原始源代码中看到,游戏的暂停和恢复方法不是简单地执行为停止计时器,但它足以达到你需要的解决方案!
我不知道这是否是最好或最有效的方法但是你可以创建一个window.pauseAll
变量并将其设置为false:
window.pauseAll=false;
,然后当ajax被调用时将其设置为true:
window.pauseAll=true;
$.ajax({...});
然后对于每个事件检查pauseAll
是否为真,如果不是,则执行脚本,否则不:
$('#element').click(function(){
if(!window.pauseAll){
//do the stuff you want
}
});
然后ajax调用完成后,再次设置为false
:
$.ajax().done(function(){
window.pauseAll=false;
});
相关文章:
- 在哪里使用名为“;冻结”;
- 如何临时暂停浏览器渲染,然后恢复整个页面
- jQuery循环在特定位置暂停
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- For循环冻结Javascript
- 最小化时暂停Javascript动画
- jQuery:暂停按钮可以暂停所有其他操作
- 为什么继续;语句冻结浏览器
- tiltSlider播放/暂停视频元素(如果li有当前类)
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- CSS动画暂停并使用javascript播放
- 如何暂停和恢复jquery间隔
- 如何在隐藏时暂停jquery计时器
- 具体化:如何只使用HTML和Javascript制作播放/暂停按钮
- Javascript-SetTimeout导致浏览器冻结
- 用于发现哪个JS/jQuery脚本正在冻结页面的工具或技术
- 在 jquery 中定位暂停和播放按钮
- 暂停文档-HTML、CSS、JavaScript
- 冻结/暂停的方法 显示外汇数据流的 UI 图表
- 暂停Javascript ||冻结页面