1

我正在制作 5 个虫子在屏幕上随机飞行并从侧面弹跳的动画。我做了一个函数来为每个错误做动画。这是功能的一部分。当我将 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";

如何bugNamegetElementById()不出现语法错误的情况下传递?

这就是“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";
}
4

1 回答 1

0

这里的问题是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);">
于 2013-04-09T20:12:51.573 回答