¿Cómo puedo obtener el ancho y el alto del elemento de lienzo en JavaScript?
Además, ¿cuál es el "contexto" del lienzo sobre el que sigo leyendo?
fuente
¿Cómo puedo obtener el ancho y el alto del elemento de lienzo en JavaScript?
Además, ¿cuál es el "contexto" del lienzo sobre el que sigo leyendo?
Podría valer la pena ver un tutorial: Tutorial de Firefox Canvas
Puede obtener el ancho y el alto de un elemento de lienzo simplemente accediendo a esas propiedades del elemento. Por ejemplo:
var canvas = document.getElementById('mycanvas');
var width = canvas.width;
var height = canvas.height;
Si los atributos de ancho y alto no están presentes en el elemento de lienzo, se devolverá el tamaño predeterminado de 300x150. Para obtener dinámicamente el ancho y alto correctos, use el siguiente código:
const canvasW = canvas.getBoundingClientRect().width;
const canvasH = canvas.getBoundingClientRect().height;
O usando la sintaxis de desestructuración de objetos más corta:
const { width, height } = canvas.getBoundingClientRect();
El context
es un objeto que obtienes del lienzo para que puedas dibujar en él. Puede pensar en el context
como la API del lienzo, que le proporciona los comandos que le permiten dibujar en el elemento del lienzo.
width
yheight
se especifican directamente como<canvas />
atributos de etiquetaBueno, todas las respuestas anteriores no son del todo correctas. 2 de los principales navegadores no admiten esas 2 propiedades (IE es una de ellas) o las usan de manera diferente.
Mejor solución (compatible con la mayoría de los navegadores, pero no verifiqué Safari):
Al menos obtengo los valores correctos con scrollWidth y -Height y DEBO establecer canvas.width y height cuando se cambia de tamaño.
fuente
Las respuestas que mencionan
canvas.width
devuelven las dimensiones internas del lienzo, es decir, las especificadas al crear el elemento:Si modifica el tamaño del lienzo con CSS, se puede acceder a sus dimensiones DOM mediante
.scrollWidth
y.scrollHeight
:fuente
width
yheight
call siempre devolverán 300x150 si no especifica ningún valor y usa un tamaño relativo (mientras usa bootstrap ... etc.). Gracias.El objeto de contexto le permite manipular el lienzo; puedes dibujar rectángulos, por ejemplo, y mucho más.
Si desea obtener el ancho y el alto, puede usar los atributos HTML estándar
width
yheight
:fuente
ahora a partir de 2015, todos los navegadores (¿principales?) parecen permitir
c.width
yc.height
obtener el tamaño interno del lienzo , pero:la pregunta como las respuestas son engañosas, porque el lienzo tiene en principio 2 tamaños diferentes / independientes.
El "html" permite decir CSS ancho / alto y su propio (atributo-) ancho / alto
mire este breve ejemplo de diferentes tamaños , donde puse un lienzo 200/200 en un elemento html 300/100
Con la mayoría de los ejemplos (todos los que vi) no hay un conjunto de tamaño css, por lo que estos incluyen el ancho y la altura del tamaño del lienzo (dibujo). Pero eso no es obligatorio y puede producir resultados divertidos si se toma el tamaño incorrecto, es decir. css ancho / alto para posicionamiento interior.
fuente
Ninguno de ellos funcionó para mí. Prueba esto.
fuente
Aquí hay un CodePen que usa canvas.height / width, CSS height / width y context para representar correctamente cualquier lienzo en cualquier tamaño .
HTML:
CSS:
Javascript:
Básicamente, canvas.height / width establece el tamaño del mapa de bits que está renderizando. El alto / ancho de CSS luego escala el mapa de bits para que se ajuste al espacio de diseño (a menudo lo deforma al escalarlo). El contexto puede entonces modificar su escala para dibujar, usando operaciones vectoriales, en diferentes tamaños.
fuente
Tuve un problema porque mi lienzo estaba dentro de un contenedor sin identificación, así que usé este código jquery a continuación
fuente