¿Cómo puedo escalar automáticamente el <canvas>
elemento HTML5 para que se ajuste a la página?
Por ejemplo, puedo obtener una <div>
escala ajustando las propiedades height
y width
al 100%, pero una <canvas>
escala no, ¿verdad?
javascript
html
html5-canvas
devyn
fuente
fuente
Respuestas:
Creo que he encontrado una solución elegante para esto:
JavaScript
CSS
No ha tenido ningún gran impacto negativo en el rendimiento para mí, hasta ahora.
fuente
body, html { margin: 0px;}
La siguiente solución me funcionó mejor. Como soy relativamente nuevo en la codificación, me gusta tener una confirmación visual de que algo funciona de la manera que espero. Lo encontré en el siguiente sitio: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Aquí está el código:
El borde azul muestra el borde del lienzo de cambio de tamaño, y siempre está a lo largo del borde de la ventana, visible en los 4 lados, lo cual NO fue el caso para algunas de las otras respuestas anteriores. Espero eso ayude.
fuente
overflow: hidden
ydisplay: block
es lo que faltaba para que esto funcionara correctamente.Básicamente, lo que tiene que hacer es vincular el evento onresize a su cuerpo, una vez que capta el evento solo necesita cambiar el tamaño del lienzo usando window.innerWidth y window.innerHeight.
fuente
Establecer el ancho y la altura del espacio de coordenadas del lienzo en función de las dimensiones del cliente del navegador requiere que cambie el tamaño y vuelva a dibujar cada vez que cambie el tamaño del navegador.
Una solución menos complicada es mantener las dimensiones dibujables en las variables de Javascript, pero establecer las dimensiones del lienzo en función de las dimensiones screen.width, screen.height. Use CSS para encajar:
La ventana del navegador generalmente nunca será más grande que la pantalla en sí misma (excepto donde la resolución de la pantalla no se informa correctamente, ya que podría ser con monitores duales no coincidentes), por lo que el fondo no se mostrará y las proporciones de píxeles no variarán. Los píxeles del lienzo serán directamente proporcionales a la resolución de la pantalla a menos que use CSS para escalar el lienzo.
fuente
Un enfoque CSS puro que se agrega a la solución de @jerseyboy anterior.
Funciona en Firefox (probado en v29), Chrome (probado en v34) e Internet Explorer (probado en v11).
Enlace al ejemplo: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Pero tenga cuidado, como dice @jerseyboy en su comentario:
fuente
fuente
A menos que desee que el lienzo aumente la escala de sus datos de imagen automáticamente (de eso es de lo que habla la respuesta de James Black, pero no se verá bonito), debe cambiar el tamaño usted mismo y volver a dibujar la imagen. Centrando un lienzo
fuente
Si su div llenó completamente la página web, entonces puede llenar ese div y así tener un lienzo que llena el div.
Puede encontrar esto interesante, ya que puede necesitar usar un CSS para usar el porcentaje, pero depende de qué navegador esté usando y de cuánto esté de acuerdo con la especificación: http://www.whatwg.org/ specs / web-apps / current-work / multipage / the-canvas-element.html # the-canvas-element
Es posible que deba obtener el offsetWidth y la altura del div, u obtener la altura / ancho de la ventana y establecerlo como el valor de píxel.
fuente
CSS
JavaScript
fuente
Si está interesado en preservar las relaciones de aspecto y hacerlo en CSS puro (dada la relación de aspecto), puede hacer algo como a continuación. La clave está
padding-bottom
en el::content
elemento que dimensiona elcontainer
elemento. Esto tiene un tamaño relativo al ancho de su padre, que es100%
por defecto. La proporción especificada aquí tiene que coincidir con la proporción de los tamaños en elcanvas
elemento.fuente
Usando jQuery puedes rastrear el tamaño de la ventana y cambiar el ancho de tu lienzo usando jQuery también.
Algo como eso
fuente
fuente
Creo que esto es exactamente lo que debemos hacer: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
fuente
Estoy usando sketch.js, así que después de ejecutar el comando init para el lienzo, cambio el ancho y la altura con jquery. Basa las dimensiones en el elemento padre.
fuente