我正在努力在明天的工作中用javascript创建一个烟花表演,我在使其自动化方面遇到了一些麻烦。我正在使用找到here的烟花,但效果很好,但这是我刚才开发的状态网页,所以我希望烟花是自动的而不是点击。
我在fireworks.js页面上创建了一个看起来像这样的函数......
function fireFireworks(){
var num = Math.floor(Math.random()*3) + 1;
for(i=0;i<num;i++){
createFirework();
}
}
这将用于在调用时触发1到3个烟花。然后我设置
setInterval('fireFireworks()', 5000);
当我在本地文件中而不是在fireworks.js文件中定义了这两个时,我得到了对createFirework()
的错误引用。
所以我将fireFireworks()
移到了fireworks.js中的初始化函数之下,然后我得到了对fireFireworks()
的错误引用,所以我将setInterval
移到intialize
函数,但我仍然得到fireFireworks()
的错误引用。
但是,如果我更改了onmouseup
的活页夹
document.addEventListener('mouseup',createFireworks,true);
至
document.addEventListener('mouseup',fireFireworks,true);
它成功创建了我的多个烟火。
我假设setInterval的范围在这里起作用。如果有人能让我知道如何自动化这个以及为什么我的设置不起作用的一些信息我真的很感激它!
答案 0 :(得分:3)
将函数本身传递给setInterval
,即
setInterval (fireFireworks, 5000)
至于范围界定,如果您的createFireworks
功能未在其他地方使用,只需将放在 fireFireworks
内,您就不必担心了更多(无论如何,这通常被认为更好,因为它避免污染全球范围)。
否则,将两个函数包装在闭包中:
(function ()
{
function fireFireworks ()
{
/* ... */
}
function createFirework ()
{
/* ... */
}
setInterval (fireFireworks, 5000)
}) ();
答案 1 :(得分:0)
试试这个:
(function(global){
var theShow = {},
createFirework;
createFirework = function() {
};
theShow.fireFireworks = function() {
var num = Math.floor(Math.random()*3) + 1,
i = 0;
for(i;i<num;i++){
createFirework();
}
};
global.setInterval(theShow.fireFireworks , 5000);
global.theShow = theShow;
}(window));
现在,只要在调用此代码之后,您就可以从应用程序中的任何JavaScript代码调用theShow.firFireworks()
。希望这会有所帮助。
答案 2 :(得分:-1)
您正在使用setInterval()函数来破坏范围(使用字符串)。尝试添加到初始化函数:
var fireworksTimer = setInterval(fireFireworks, 5000);
然后如果你使fireFireworks成为“公共”功能,
fireFireworks = function(){
....
}
在单独的js文件中,它现在应该是可调用的。
答案 3 :(得分:-1)
setInterval('fireFireworks', 20) 将不起作用,因为它是一个字符串,您应该键入 setInterval(fireFireworks,20) 这将起作用