我正在做一个5只虫子在屏幕上随机飞行并从侧面反弹的动画。我创建了一个函数来为每个bug制作动画。这是函数的一部分。当我将bugName变量传递给getElementById()时,它包含字符串"bugOne"。当我使用这段代码时,我得到了这一行的对象预期错误。
if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
xDirection = "left";
当我使用这段代码时,没有语法错误(尽管由于某种原因动画仍然不能正常工作)。
if (xDirection == "right" && xPosition > (widthMax - document.getElementById("bugOne").width - flySpeed))
xDirection = "left";
如何将bugName
传递给getElementById()
而不出现语法错误?
这就是"bugOne"如何进入bugName。我正在删除一些代码,只显示基本的。
我从主体onload事件处理程序中调用它。
<body onload="flyVar=setInterval('setBug('bugOne')', 30);">
在文档头部调用了这个函数
function setBug(bugName) {
flyBug(bugName);
}
调用了这个函数它也在文档头部
function flyBug(bugName) {
if (bugName == "bugOne") {
flySpeed = 5;
xPosition = 0;
yPosition = 100;
xDirection = "right";
yDirection = "up";
if (xDirection == "right" && xPosition > (widthMax - document.getElementById(bugName).width - flySpeed))
xDirection = "left";
}
这里的问题是setInterval()
不直接支持包括参数(我目前无法测试,但我相信Mozilla在那里发现了以下内容:
回调参数如果你需要传递一个参数给你的回调函数,但需要它在Internet Explorer中工作,其中不支持发送附加参数(也不支持setTimeout()或setInterval()),您可以包含此特定于ie的兼容性代码,它将启用HTML5标准参数在浏览器的通道功能,这两个计时器只是通过将它插入到脚本的开头。
[…示例代码…]
另一种可能性是使用匿名函数调用回调,但是这个解决方案有点贵。例子:
var intervalID = setInterval(function() { myFunc("one", "two", "three"); }, 1000);
另一种可能是使用函数的绑定。例子:
var intervalID = setInterval(function(arg1) {}.bind(undefined, 10), 1000);
因此,我相信您可以通过更改onload调用来纠正这种行为,如下所示:
<body onload="flyVar=setInterval(function() { setBug('bugOne'); }, 30);">