106 votes

Comment puis-je obtenir la largeur et la hauteur d'un canevas HTML5 ?

Comment puis-je obtenir la largeur et la hauteur de l'élément canvas en JavaScript ?

Aussi, de quoi s'agit-il du "contexte" du canvas dont je lis souvent ?

151voto

andrewmu Points 6436

Il pourrait être utile de consulter un tutoriel: Tutoriel Canvas MDN

Vous pouvez obtenir la largeur et la hauteur d'un élément canvas en accédant simplement à ces propriétés de l'élément. Par exemple:

var canvas = document.getElementById('mycanvas');
var width = canvas.width;
var height = canvas.height;

Si les attributs de largeur et de hauteur ne sont pas présents dans l'élément canvas, la taille par défaut de 300x150 sera retournée. Pour obtenir dynamiquement la largeur et la hauteur correctes, utilisez le code suivant:

const canvasW = canvas.getBoundingClientRect().width;
const canvasH = canvas.getBoundingClientRect().height;

Ou en utilisant la syntaxe plus courte de la déstructuration d'objet:

const { width, height } = canvas.getBoundingClientRect();

Le contexte est un objet que vous obtenez du canvas pour vous permettre de dessiner dedans. Vous pouvez penser au contexte comme à l'API du canvas, qui vous fournit les commandes vous permettant de dessiner sur l'élément canvas.

0 votes

Notez que le tutoriel de Mozilla est essentiellement un tas de liens brisés maintenant, malheureusement. J'espère qu'ils le répareront un jour.

1 votes

Cela renvoie la taille du canevas de contexte dans Chrome 31.

13 votes

Cela fonctionne uniquement si width et height sont spécifiés directement en tant qu'attributs de la balise

38voto

Bitterblue Points 1652

Eh bien, toutes les réponses précédentes ne sont pas entièrement correctes. 2 des principaux navigateurs ne prennent pas en charge ces 2 propriétés (IE en fait partie) ou les utilisent différemment.

Meilleure solution (prise en charge par la plupart des navigateurs, mais je n'ai pas vérifié Safari) :

var canvas = document.getElementById('mycanvas');
var width = canvas.scrollWidth;
var height = canvas.scrollHeight;

Au moins, j'obtiens des valeurs correctes avec scrollWidth et -Height et DOIS définir canvas.width et height quand il est redimensionné.

0 votes

IE9 semble en effet prendre en charge canvas.width et la hauteur (les versions antérieures à 9 ne prenaient pas en charge canvas du tout), je viens juste de le tester. Quels problèmes as-tu rencontrés? Et quel est l'autre navigateur majeur?

1 votes

Right, je ne mets vraiment jamais à jour IE car je ne l'utilise pas. L'autre navigateur majeur est Opera qui ne mettait / ne met pas à jour la largeur et la hauteur lors du redimensionnement.

2 votes

Canvas.width ou height ne renvoient pas la taille totale du canevas, préférez canvas.scrollWidth ou height pour obtenir la taille réelle totale du canevas.

23voto

Dan Dascalescu Points 8165

Les réponses mentionnant canvas.width renvoient aux dimensions internes du canvas, c'est-à-dire celles spécifiées lors de la création de l'élément :

Si vous redimensionnez le canvas avec du CSS, ses dimensions DOM sont accessibles via .scrollWidth et .scrollHeight :

var canvasElem = document.querySelector('canvas');
document.querySelector('#dom-dims').innerHTML = 'Largeur x hauteur de l\'élément DOM du canvas : ' +
      canvasElem.scrollWidth +
      ' x ' +
      canvasElem.scrollHeight

var canvasContext = canvasElem.getContext('2d');
document.querySelector('#internal-dims').innerHTML = 'Largeur x hauteur internes du canvas : ' +
      canvasContext.canvas.width +
      ' x ' +
      canvasContext.canvas.height;

canvasContext.fillStyle = "#00A";
canvasContext.fillText("Déformé", 0, 10);

16voto

Harmen Points 11632

L'objet de contexte vous permet de manipuler le canvas; vous pouvez par exemple dessiner des rectangles et bien plus encore.

Si vous voulez obtenir la largeur et la hauteur, vous pouvez simplement utiliser les attributs HTML standards width et height:

var canvas = document.getElementById( 'yourCanvasID' );
var ctx = canvas.getContext( '2d' );

alert( canvas.width );
alert( canvas.height );

3 votes

Cette réponse est pratiquement identique à celle de @andrewmu et ne fonctionnera pas si vous redimensionnez le canvas via CSS. Consultez ma réponse pour une solution plus robuste.

10voto

halfbit Points 605

À partir de 2015, tous les navigateurs (majeurs ?) semblent permettre à c.width et c.height d'obtenir la taille interne du canevas, mais :

la question comme les réponses sont trompeuses, car un canevas a en principe 2 tailles différentes / indépendantes.

Le "html" permet de définir la largeur / hauteur CSS et sa propre largeur / hauteur (attribut)

jetez un coup d'œil à cet exemple court de tailles différentes, où j'ai mis un canevas 200/200 dans un élément html 300/100

Avec la plupart des exemples (tous ceux que j'ai vus), aucune taille css n'est définie, donc elles obtiennent implicitement la largeur et la hauteur de la taille du canevas de dessin. Mais ce n'est pas obligatoire et peut produire des résultats amusants si vous prenez la mauvaise taille - c'est-à-dire la largeur / hauteur css pour le positionnement interne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X