Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getContext is not a function

I'm working on making a basic web application using canvas that dynamically changes the canvas size when the window resizes. I've gotten it to work statically without any flaws but when I create an object to make it dynamically it throws an error

in chrome the error is:

Uncaught TypeError: Object [object Object] has no method 'getContext'

and in firefox it is:

this.element.getContext is not a function

I've searched the web and it seems like a common problem but none of the fixes mentioned make any difference.

The code is in question is as follows:

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()); } 

Thanks in advance.

like image 970
devnill Avatar asked Apr 27 '11 17:04

devnill


People also ask

What is the getContext function?

getContext() : Returns the context the view is currently running in. Usually the currently active Activity. Activity. getApplicationContext() : Returns the context for the entire application (the process all the Activities are running inside of).

Can not read property getContext?

The "Cannot read property 'getContext' of null" error occurs when calling the getContext method on a null value. To solve the error, make sure the JS script tag is loaded after the HTML is declared and the id of the element exists in the DOM.

What does getContext 2D?

The getContext() function is the function that you use to get access to the canvas tags 2D drawing functions. As of April 2014, there are two types of context that are available to you: 2d and webgl . These provide you with the API that you use to draw on the canvas.

What is getContext return?

getContext(): It returns the Context which is linked to the Activity from which it is called. This is useful when we want to call the Context from only the current running activity.


1 Answers

Your value:

this.element = $(id); 

is a jQuery object, not a pure Canvas element.

To turn it back so you can call getContext(), call this.element.get(0), or better yet store the real element and not the jQuery object:

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"); } 

See running code at http://jsfiddle.net/alnitak/zbaMh/, ideally using the Chrome Javascript Console so you can see the resulting object in the debug output.

like image 113
Alnitak Avatar answered Oct 01 '22 17:10

Alnitak