我正在制作一个动画,在屏幕上随机飞行并从侧面反弹。我做了一个函数来为每个bug做动画。这是该功能的一部分。 bugName变量包含字符串" bugOne"当我将它传递给getElementById()时。当我使用此代码时,我得到此行的对象预期错误。
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。我删除了一些代码,只显示了基础知识。
我从body 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";
}
答案 0 :(得分:0)
这里的问题是setInterval()
不直接支持包含参数(我目前无法对此进行测试,但I believe 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);">