这个问题似乎很常见,虽然我找不到答案。
我有这个带有唯一画布标签的简单 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。
所以我的问题是我做错了什么?我也想知道是否有更好的方法来做到这一点。
PS我倾向于不使用jquery ...
已编辑:上下文错误与上面的代码无关,尽管我仍然不喜欢将 js 文件的链接放在正文末尾的想法...