当我想获得画布的上下文时,我遇到了问题。 这是HTML代码:
<canvas id="thecanvas" width="600" height="300"></canvas>
和Javascript:
var canvaso = document.getElementById('thecanvas');
if (!canvaso) {
alert('Error: Cannot find the canvas element!');
return;
}
if (!canvaso.getContext) {
alert('Error: Canvas context does not exist!');
return;
}
“canvaso”变量已正确加载,但在“canvaso.getContext”上失败:
Uncaught TypeError: Object #<HTMLDivElement> has no method 'getContext'
感谢您的帮助。
答案 0 :(得分:3)
您的浏览器不符合HTML5标准。兼容的浏览器将返回Object #<HTMLCanvasElement> has no method 'getContext'
(尽管getContext方法可以工作)
Works fine here,你确定你在同一页面上的thecan的id有画布吗?
以下是一种可能性:您是否曾在文档中的任何位置定义div
thecanvas
,最有可能是在画布之后?重复IDS在语义上是不正确的,getElementById将返回DOM中该Id的最后一次出现。
答案 1 :(得分:3)
试试这个(参见演示:http://jsbin.com/ijazum/1):
<body>
<canvas id="canvas" width="600" height="300"></canvas>
<script>
function getStart() {
var canvas = document.getElementById('canvas');
if (!canvas) {
alert('Error: Cannot find the canvas element!');
return;
}
if (!canvas.getContext) {
alert('Error: Canvas context does not exist!');
return;
}
var ctx = canvas.getContext('2d');
ctx.fillStyle = "#3d3";
ctx.fillRect(0, 0, 100, 100);
}
getStart();
</script>
</body>
答案 2 :(得分:0)
这可能是因为您将javascript作为外部文件加载到页面的<head>
块中。这意味着您的javascript在加载<canvas>
元素之类的其他html元素之前运行。这就是为什么你的浏览器在页面上找不到任何具有给定ID的元素的原因 - 因为那时canvas元素不存在。
有一些解决方案:
<script>
阻止后的任何时间,将{j}代码输入<canvas>
块。onload
中的<body>
属性标记)。第二种解决方案的样本如下所示:
的index.html:
<!DOCTYPE html>
<html>
<head>
<script src="myscript.js"> </script>
</head>
<body onload="test()">
<canvas id="thecanvas" width="600" height="300"></canvas>
</body>
</html>
myscript.js:
function test() {
var canvaso = document.getElementById('thecanvas');
if (!canvaso) {
alert('Error: Cannot find the canvas element!');
return;
}
else if (!canvaso.getContext) {
alert('Error: Canvas context does not exist!');
return;
}
else {
alert('Success!');
}
}