我有:
<div id="canvasContainer">
<canvas id="myCanvas" height="450" width="650"></canvas>
</div>
和
var myCanvas = $("#myCanvas");
var myCanvasContext = myCanvas.getContext("2d");
但我得到了:
未捕获的TypeError:myCanvas.getContext不是函数
加载页面时。
当我尝试类似的事情时:
myCanvas.click (function() {
console.log("You clicked the canvas");
});
对myCanvas
的引用完美无缺。是什么给了什么?
答案 0 :(得分:19)
getContext
不是jQuery库的一部分,它是WebAPI的一部分。您必须引用原始DOM Node对象而不是jQuery包装器:
var myCanvasContext = myCanvas[0].getContext("2d");
([0]
所做的是它引用了jQuery包装器隐藏的底层DOM节点。)
您的“点击”示例有效,因为element.click
(在您的情况下)实际上是jQuery库API的一部分:https://api.jquery.com/click/
答案 1 :(得分:3)
myCanvas
是一个jQuery对象,而不是一个DOM元素......
使用以下代码
var myCanvas = document.getElementById("myCanvas");
var myCanvasContext = myCanvas.getContext("2d");
当然,然后myCanvas.click(...)
不会工作,但你总能做到
$(myCanvas).click(...)
答案 2 :(得分:1)
var myCanvas = $("#myCanvas");
获取一个JQuery对象,你需要这样做
var myCanvasContext = myCanvas[0].getContext("2d");
myCanvas [0]是一个DOM对象,
建议你像这样表达jquery对象
var $myCanvas = $("#myCanvas")
答案 3 :(得分:0)
使用html5 canvas元素而不是使用id创建元素。
例如。 <canvas></canvas>
var canvas = document.getElementById("canvas");
context = canvas.getContext('2d');
base_image = new Image();
base_image.src = imageUrl;
base_image.onload = function(){
context.drawImage(base_image, 0, 0);
}
答案 4 :(得分:0)
有同样的错误,因为我使用的是模态,dom 还没有准备好获取我的画布! 所以我这样做了:
$(document).ready(
function(){
var canvas = document.getElementById('myCanvasID');
var context = canvas.getContext('2d');
// ... });
答案 5 :(得分:0)
也可以这样做:
var canvas = document.querySelector('canvas');
var context = canvas.getContext("2d");