【发布时间】:2013-10-15 23:51:54
【问题描述】:
这个问题似乎很常见,虽然我找不到答案。
我有这个带有唯一画布标签的简单 html
<!doctype html>
<head>
<meta charset = "utf-8">
<script src="js/script.js"></script>
<title>Title</title>
</head>
<body>
<canvas id = "canvas"></canvas>
</body>
</html>
在 script.js 中,我试图捕捉 window.onload 事件:
window.onload = init;
function init(){
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillRect(50, 20, 150, 150);
}
但是什么也没发生。我假设甚至在执行第一行 js 之前就加载了 html。
所以我发现 onload 事件的替代方法是将脚本定义放在正文的末尾,因此在执行脚本时应该已经加载了窗口。所以我这样做了:
<!doctype html>
<head>
<meta charset = "utf-8">
<!-- gone -->
<title>Title</title>
</head>
<body>
<canvas id = "canvas"></canvas>
<script src="js/script.js"></script> <!-- inserted -->
</body>
</html>
和
<!-- window.onload = init; -->
init() <!-- inserted -->
function init(){
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillRect(50, 20, 150, 150);
}
在某种程度上它可以工作(绘制矩形),但给我一个错误Uncaught ReferenceError: context is not defined。
所以我的问题是我做错了什么?我也想知道是否有更好的方法来做到这一点。
附:我倾向于不使用 jquery...
已编辑:上下文错误与上面的代码无关,尽管我仍然不喜欢将 js 文件的链接放在正文末尾的想法...
【问题讨论】:
-
您在第一次尝试 init() 时缺少函数调用;以及第二次尝试在同一行“init();”的冒号。
-
不,在第一个例子中我不需要调用它。
-
@Casey:顺便说一句,我从不记下试图帮助我的人的问题,即使答案显然是错误的。应该是比你我更懂html/js的人吧。
-
有道理,很好听。很多人都是为了状态/分数,而不是堆栈背后的想法。只是想确定一下。
标签: javascript html