我正在使用两个同时触发的脚本。他们似乎引起了冲突。我的问题是如何在另一场火灾之后让一个人开火半秒到一秒钟?我认为这可能会解决我遇到的问题。
我正在使用jQuery,但我不确定如何解决这个问题。
由于
注意我没有在这里发布脚本,因为它们是不敬的。我只需要知道如何延迟一个射击直到另一个射击。我最后要点击的是位于HTML底部的另一个位于头部。这两个脚本在他们的工作中彼此完全无关。
编辑 这个问题源于我发布的另一个问题。在这里 - Javascript/Fancybox Error? - 我想到了它并想尝试添加延迟,但我也很好奇如何添加与我遇到的问题无关的延迟。
答案 0 :(得分:6)
两个脚本无法同时触发。 Javascript是单线程的,并且没有两个脚本同时运行。一个将运行完成,然后下一个将运行。如果两者之间存在冲突,那么它与脚本的编写方式有关,我们只能通过查看脚本和导致它们运行的上下文来帮助您解决问题。
此外,在加载脚本时尝试在head标记中运行的任何内容都可能无法操作浏览器DOM,因为它尚未到位。它必须被延迟,直到DOM成功加载并准备好进行操作。
很容易让一个javascript函数调用另一个javascript函数:
function doStuff1() {
// do doStuff1 stuff
doStuff2();
}
function doStuff2() {
// do doStuff2 stuff
}
doStuff1(); // call doStuff1 which will also call doStuff2
您现在又添加了一部分问题。你问如何实现延迟。您可以使用计时器在将来的某个时间运行某些代码:
setTimeout(doStuff2, 5000); // run doStuff2() in 5 seconds
答案 1 :(得分:5)
如果您想首先运行fancybox,请使用fancybox onComplete回调:
$j(document).ready(function(){
$j('#start').fancybox({
'onComplete': function () {
Engine.Initialize();
}
});
});
否则,在调用自定义初始化函数后放入fancybox代码:
$j(document).ready(function(){
Engine.Initialize();
$j("#start").fancybox({
'padding' : 0
});
});
答案 2 :(得分:2)
jfriend00的帖子是正确的,但以下内容完全符合您的要求:
// Ensure that all scripts have been loaded.
$(document).ready(function(){
// Call first script.
doFistThing();
// Set a 1 second delay that starts AFTER the first script has completed.
setTimeout(function(){
doSecondThing();
}, 1000);
});
答案 3 :(得分:1)
我不确定完全不相关的脚本是如何相互影响的,可能这些不相关的脚本正在影响他们使用的全局属性,因此会变得疯狂。 JS中有一个概念允许您并行运行两个JS脚本,这称为Web worker。 jquery家伙John Resig很久以前发表了一篇文章,我发现它使用谷歌。 http://ejohn.org/blog/web-workers/。使用Web worker,您可以在一秒钟或任何时间后启动第二个脚本。我不是JS忍者,但我认为它可以帮到你。但是,在你发布你的代码时,其他人很难向你推荐一些东西。在查看您的编辑后,我建议您在JS中探索settimeout
。同一篇文章http://ejohn.org/blog/how-javascript-timers-work/