TypeError:无法调用 null 的方法“getContext”(匿名函数)
2012-05-18
33886
我是这方面的新手,之前真的没有用过 JavaScript,所以我希望你能帮助我。我制作了一个画布,让用户使用单选按钮选择形状和颜色,然后将其绘制到画布上。我还添加了一个复选框,其中有一个选项可以为所选颜色添加渐变。以下是程序: http://people.dsv.su.se/~caak1743/Canvas/canvas.html
现在我想让形状可以在画布区域内拖放。我发现了一个代码,我认为可以修改它以在我的程序上运行,但我一直收到: TypeError:无法为以下行调用 null init (匿名函数)的方法“getContext”:
var ctx = canvas.getContext("2d");
我不知道哪里出了问题,也不知道该如何解决。我尝试寻找具有类似问题的类似程序,但没有找到可以在这里应用的任何内容。这是我尝试合并到我的代码中的代码:
function init() {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
return setInterval(draw, 10);
}
function draw() {
clear();
ctx.fillStyle = "#FAF7F8";
rectangle(0,0,WIDTH,HEIGHT);
ctx.fillStyle = "#444444";
rectangle();
}
function myMove(e){
if (dragok){
x = e.pageX - canvas.offsetLeft;
y = e.pageY - canvas.offsetTop;
}
}
function myDown(e){
if (e.pageX < x + 15 + canvas.offsetLeft && e.pageX > x - 15 +
canvas.offsetLeft && e.pageY < y + 15 + canvas.offsetTop &&
e.pageY > y -15 + canvas.offsetTop){
x = e.pageX - canvas.offsetLeft;
y = e.pageY - canvas.offsetTop;
dragok = true;
canvas.onmousemove = myMove;
}
}
function myUp(){
dragok = false;
canvas.onmousemove = null;
}
init();
canvas.onmousedown = myDown;
canvas.onmouseup = myUp;
3个回答
只需将其更正为以下内容:
<script type="text/javascript">
window.onLoad=function(){ init();};
function init() {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
return setInterval(draw, 10);
}
function draw() {
clear();
ctx.fillStyle = "#FAF7F8";
rectangle(0,0,WIDTH,HEIGHT);
ctx.fillStyle = "#444444";
rectangle();
}
function myMove(e) {
if (dragok) {
x = e.pageX - canvas.offsetLeft;
y = e.pageY - canvas.offsetTop;
}
}
function myDown(e) {
if (e.pageX < x + 15 + canvas.offsetLeft && e.pageX > x - 15 +
canvas.offsetLeft && e.pageY < y + 15 + canvas.offsetTop &&
e.pageY > y -15 + canvas.offsetTop) {
x = e.pageX - canvas.offsetLeft;
y = e.pageY - canvas.offsetTop;
dragok = true;
canvas.onmousemove = myMove;
}
}
function myUp() {
dragok = false;
canvas.onmousemove = null;
}
init();
canvas.onmousedown = myDown;
canvas.onmouseup = myUp;
</script>
这应该可以工作。问题是画布元素需要准备好运行脚本。由于
<head>
部分中的
<script>
在加载
<canvas>
之前运行,因此会出现错误。
Avinash
2012-07-15
我找到了两个解决方案。第一种是将 jquery 添加到您的页面,这样就无需使用 html 中的 js,只需将整个 js 代码包装到
$(document).ready(function() {
您的代码在这里
});
blesius
2013-12-21
您只需这样做即可消除错误。 只需在脚本前添加画布,并始终将脚本放在最后。
<body>
<canvas id="ca"></canvas>
<script type="text/javascript">
var ca = document.getElementById("ca");
var co = ca.getContext("2d");
// whatever your code
</script>
</body>
rohit
2014-03-03