jquery getContext不是函数

lrl1mhuk  于 2022-12-22  发布在  jQuery
关注(0)|答案(8)|浏览(144)

我正在使用画布制作一个基本的Web应用程序,它可以在窗口大小调整时动态地改变画布的大小。我已经让它静态地工作,没有任何缺陷,但是当我创建一个对象使它动态地工作时,它抛出了一个错误
在chrome中,错误为:
未捕获的类型错误:对象[object Object]没有方法"getContext"
在火狐中是:
此. element. getContext不是函数
我在网上搜索过,这似乎是一个常见的问题,但没有提到的修复有任何区别。
问题代码如下:

layer['background'] = new canvasLayer("body","background");
function canvasLayer(location,id){
    $(location).append("<canvas id='"+id+"'>unsupported browser</canvas>");
    this.element=$(id);
    this.context = this.element.getContext("2d"); //this is the line that throws the error
    this.width=$(window).width(); //change the canvas size
    this.height=$(window).height();
    $(id).width($(window).width()); //change the canvas tag size to maintain proper scale
    $(id).height($(window).height());
}
rjee0c15

rjee0c151#

您的价值:

this.element = $(id);

是一个jQuery对象,而不是纯粹的Canvas元素。
要将其返回,以便可以调用getContext()、调用this.element.get(0),或者更好地存储真实的元素而不是jQuery对象:

function canvasLayer(location, id) {

    this.width = $(window).width();
    this.height = $(window).height();
    this.element = document.createElement('canvas');

    $(this.element)
       .attr('id', id)
       .text('unsupported browser')
       .attr('width', this.width)       // for pixels
       .attr('height', this.height)
       .width(this.width)               // for CSS scaling
       .height(this.height)
       .appendTo(location);

    this.context = this.element.getContext("2d");
}

请参见在http://jsfiddle.net/alnitak/zbaMh/下运行代码,最好使用Chrome Javascript控制台,这样您就可以在调试输出中看到生成的对象。

n8ghc7c1

n8ghc7c12#

我得到了同样的错误,因为我不小心使用了<div>而不是<canvas>作为试图调用getContext的元素。

cetgtptt

cetgtptt3#

或者,您可以用途:

this.element=$(id)[0];
wydwbb8l

wydwbb8l4#

实际上,当我们在javascript中创建画布时,也会出现这个错误,如下所示。
创建元素('画布');
这里需要注意的一点是,我们必须正确地提供参数名称为“canvas”,而不是其他任何内容。
谢啦,谢啦

pwuypxnk

pwuypxnk5#

这可能看起来很明显,但你可能会认为你有一切正确的,例如:canvas元素有一个id,但在我的例子中,我有一个div元素也有相同的id,这导致了我的错误。

6rvt4ljy

6rvt4ljy6#

我最近得到这个错误,因为错字,我写'canavas'而不是'canvas',希望这可以帮助人谁是搜索这个。

fsi0uk1n

fsi0uk1n7#

这个错误发生时,你要求运行getContext函数的元素不是真正定义的画布或根本不是画布,所以你必须检查你的元素.

yks3o0rb

yks3o0rb8#

这个值会在数组的第0个位置。所以我们需要执行variable = $("#id") use variable[0]

相关问题