GetContext не является функцией
Я работаю над созданием базового веб-приложения с использованием холста, который динамически изменяет размер холста при изменении размера окна. Я получил его, чтобы он работал статически без каких-либо недостатков, но когда я создаю объект, чтобы сделать его динамически, он выдает ошибку
в хром ошибка:
Uncaught TypeError: Object [object Object] не имеет метода getContext
и в firefox это:
this.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());
}
Спасибо заранее.
Ответы
Ответ 1
Ваше значение:
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')
.width(this.width)
.height(this.height)
.appendTo(location);
this.context = this.element.getContext("2d");
}
См. текущий код в http://jsfiddle.net/alnitak/zbaMh/, в идеале используя Chrome Javascript Console, чтобы вы могли видеть результирующий объект в выводе debug.
Ответ 2
В качестве альтернативы вы можете использовать:
this.element=$(id)[0];
Ответ 3
Я получил ту же ошибку, потому что случайно использовал <div>
вместо <canvas>
как элемент, на который я пытаюсь вызвать getContext
.