0

我有3个文件

文件 1:index.html

<!DOCTYPE html>
<html>
<head>
    <LINK href="style.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="bounce.js"></script>
    <title>Bouncing ball</title>
</head>
<body>
<div id='ball'></div>
</body>
</html>

文件 2:bounce.js

var ball = document.getElementById("ball");
var nx = 0;
var ny = 0;
setInterval(loop, 1000 / 30);
function loop() {
    nx++;
    ny++;
    ball.style.left = nx;
    ball.style.top = ny;

}

文件 3:style.css

#ball {
    position: absolute;
    border-radius: 50px;
    width: 50px;
    height: 50px;
    background: black;
}

我在 html 文件中加载 .css 和 .js 。现在我正试图让 te div “球”,我想用它做点什么。在这种情况下,我想让它反弹浏览器的边框。但关键是,我遇到了错误。

未捕获的类型错误:无法读取 null 的属性“样式”

bonce.js 无法获取元素球。为什么不?我究竟做错了什么?

4

3 回答 3

2

那是因为你的代码是在 DOM 准备好之前执行的。此时没有具有此 id 的元素。

将您的代码放在 onload 回调中:

window.onload = function(){
    var ball = document.getElementById("ball");
    var nx = 0;
    var ny = 0;
    setInterval(loop, 1000 / 30);
    function loop() {
        nx++;
        ny++;
        ball.style.left = nx;
        ball.style.top = ny;
    }
};
于 2013-01-08T20:59:28.583 回答
2

您正在尝试在元素加载到 DOM 之前获取元素。做这个:

<!DOCTYPE html>
<html>
<head>
    <LINK href="style.css" rel="stylesheet" type="text/css">
    <title>Bouncing ball</title>
</head>
<body>
    <div id='ball'></div>
    <script type="text/javascript" src="bounce.js"></script>
</body>
</html>

在底部包含所有 JavaScript 是一种很好的做法,这样下载时就不会阻塞页面。它会确保你没有这样的错误。

于 2013-01-08T20:59:33.487 回答
2

将脚本移动到页面末尾或将其包装在 onload 事件中。您在元素加载之前执行它。

<!DOCTYPE html>
<html>
<head>
    <LINK href="style.css" rel="stylesheet" type="text/css">
    <title>Bouncing ball</title>
</head>
<body>
<div id='ball'></div>
    <script type="text/javascript" src="bounce.js"></script>
</body>
</html>
于 2013-01-08T20:59:34.273 回答