J'ai 2 toiles, l'une utilise des attributs HTML width
et height
pour la dimensionner, l'autre utilise du CSS:
<canvas id="compteur1" width="300" height="300" onmousedown="compteurClick(this.id);"></canvas>
<canvas id="compteur2" style="width: 300px; height: 300px;" onmousedown="compteurClick(this.id);"></canvas>
Compteur1 s'affiche comme il se doit, mais pas compteur2. Le contenu est dessiné en utilisant JavaScript sur une toile 300x300.
Pourquoi y a-t-il une différence d'affichage?
#attr-canvas-width
). Le problème est que j'ai cliqué sur le mauvaiswidth
avant et suis allé à la#dom-canvas-width
place à la place. Classé w3.org/Bugs/Public/show_bug.cgi?id=9469 à ce sujet.Pour définir le
width
et dontheight
vous avez besoin, vous pouvez utiliserla source
el.setAttribute('width', parseInt($el.css('width')))
fait l'affaire, merciwidth: 100%;
propriété CSS?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Répétez l'opération pour la hauteur.Pour les
<canvas>
éléments, les règles CSSwidth
etheight
définissent la taille réelle de l'élément de canevas qui sera dessiné sur la page. D'autre part, les attributs HTMLwidth
etheight
définissent la taille du système de coordonnées ou de la «grille» que l'API Canvas utilisera.Par exemple, considérez ceci ( jsfiddle ):
Les deux ont eu la même chose dessinée sur eux par rapport aux coordonnées internes de l'élément canvas. Mais dans le deuxième canevas, le rectangle rouge sera deux fois plus large car le canevas dans son ensemble est étiré sur une zone plus grande par les règles CSS.
Remarque: Si les règles CSS pour
width
et / ouheight
ne sont pas spécifiées, le navigateur utilisera les attributs HTML pour dimensionner l'élément de telle sorte qu'une unité de ces valeurs soit égale à 1 px sur la page. Si ces attributs ne sont pas spécifiés, ils seront par défaut à unwidth
de300
et unheight
de150
.la source
La toile sera étirée si vous définissez la largeur et la hauteur dans votre CSS. Si vous souhaitez manipuler dynamiquement la dimension du canevas, vous devez utiliser JavaScript comme ceci:
la source
canvas.setAttribute
avantcanvas.getContext('2d')
pour éviter d'étirer l'image.Le navigateur utilise la largeur et la hauteur css, mais l'élément canvas est mis à l'échelle en fonction de la largeur et de la hauteur du canevas. En javascript, lisez la largeur et la hauteur css et définissez la largeur et la hauteur du canevas à cela.
la source
Correction Shannimal
la source
CSS définit la largeur et la hauteur de l'élément canvas afin qu'il affecte l'espace de coordonnées, laissant tout dessiné de travers
Voici ma façon de définir la largeur et la hauteur avec Vanilla JavaScript
la source
Si vous souhaitez un comportement dynamique basé, par exemple, sur des requêtes multimédia CSS, n'utilisez pas d'attributs de largeur et de hauteur du canevas. Utilisez les règles CSS, puis, avant d'obtenir le contexte de rendu du canevas, attribuez aux attributs largeur et hauteur les styles CSS largeur et hauteur:
la source