I am writing some code that uses HTML5 canvas. Generally it works well, but now I found a very strange behaviour. The weird thing is that it is consistent on different browsers, so must be that I understood the thing wrong... Despite the docs seem to say exactly what I am doing. Here is the code (it's an object method):
MyCanvas.prototype.getElement = function() { var innerHtml = "<div></div>"; var elem = jQuery(innerHtml, { 'id' : this.viewId }); var canvas = jQuery("<canvas/>", { 'id' : this.viewId + "canvas", 'width' : this.width, 'height' : this.height }); var w = this.width; var h = this.height; jQuery(elem).append(canvas); var imgElem = new Image(); imgElem.src = this.maskImage; imgElem.onload = function() { var ctx = canvas[0].getContext('2d'); ctx.drawImage(this, 0, 0, w, h); }; return elem; };
After this I'll use jQuery again to append this element to a Div that is already in the page (which is blank). The result will be that the image is overstretched like ten times it's width.... That is weird because, for what I understood of drawImage, it should use the w and h values to scale the image and given that w and h are the size of the canvas, it should fit well.
What am I doing wrong? Is it because I do the drawing off the rendered DOM tree?
The CANVAS element allows you to add so much more interactivity to your web pages because now you can control the graphics, images, and text dynamically with a scripting language. The CANVAS element helps you turn images, photos, charts, and graphs into animated elements.
The canvas element is part of HTML5 and allows for dynamic, scriptable rendering of 2D shapes and bitmap images.
The Canvas tab loaded in one second and takes up 30MB. It also takes up 13% of CPU time all of the time, regardless of whether or not one is looking at it. Video on the HTML page, while I am not moving objects, is actually perfectly smooth.
I found this "feature" as well to be a bit irksome. It seems as though you don't want to use CSS to set the width and height properties for the canvas element. Append the canvas element with attributes (rather than CSS) and the dimensions should correct themselves.
var canvas = jQuery("<canvas/>", { 'id' : this.viewId + "canvas" }); $('#' + this.viewId).attr('height', this.height).attr('width', this.width);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With