voy a responder a la cuestión más general de cómo tener un lienzo adaptarse dinámicamente al tamaño cambio de tamaño de la ventana. La respuesta aceptada maneja adecuadamente el caso donde se supone que el ancho y la altura son del 100%, que es lo que se solicitó, pero que también cambiará la relación de aspecto del lienzo. Muchos usuarios querrán que el lienzo cambie el tamaño del tamaño de la ventana, pero manteniendo intacta la relación de aspecto. No es la pregunta exacta, pero "encaja", simplemente colocando la pregunta en un contexto un poco más general.
La ventana tendrá una relación de aspecto (ancho/alto), y también lo hará el objeto canvas. Cómo desea que estas dos proporciones de aspecto se relacionen entre sí es algo que tendrá que tener en claro, no existe una respuesta de "talla única" para esa pregunta. Iré a través de algunos casos comunes de lo que podría querer.
Lo más importante que debe tener en claro: el objeto de lienzo html tiene un atributo de ancho y un atributo de alto; y luego, el CSS del mismo objeto también tiene un ancho y un atributo de altura. Esos dos anchos y alturas son diferentes, ambos son útiles para diferentes cosas.
Cambiar los atributos de ancho y alto es un método con el que siempre puede cambiar el tamaño de su lienzo, pero luego tendrá que volver a pintar todo, lo que llevará tiempo y no siempre es necesario, debido a su tamaño cambio que puede lograr a través de los atributos css, en cuyo caso no vuelve a dibujar el lienzo.
veo 4 casos de lo que es posible que desee pasar en cambiar el tamaño de la ventana (todo a partir de un lienzo en pantalla completa)
1: desea que el ancho de permanecer 100%, y desea que la relación de aspecto para quedarse como era. En ese caso, no necesita volver a dibujar el lienzo; ni siquiera necesita un controlador de cambio de tamaño de ventana. Todo lo que necesita es
$(ctx.canvas).css("width", "100%");
donde ctx es su contexto de lienzo. violín: resizeByWidth
2: quiere que el ancho y el alto permanezcan al 100%, y desea que el cambio resultante en la relación de aspecto tenga el efecto de una imagen estirada. Ahora, todavía no necesita volver a dibujar el lienzo, pero necesita un controlador de cambio de tamaño de ventana. En el controlador, lo hace
$(ctx.canvas).css("height", window.innerHeight);
violín: messWithAspectratio
3: desea anchura y la altura a la vez permanecer 100%, pero la respuesta al cambio en la relación de aspecto es algo diferente de la extensión de la imagen. Luego debe volver a dibujar, y hágalo de la forma que se describe en la respuesta aceptada.
violín: redraw
4: desea que la anchura y la altura para ser el 100% de la carga de la página, pero se mantenga constante a partir de entonces (sin reacción al cambio de tamaño de ventana
violín:. fixed
Todos Los violines tienen un código idéntico, excepto la línea 63 donde está configurado el modo. También puede copiar el código del violín para ejecutar en su máquina local, en cuyo caso puede seleccionar el modo mediante un argumento querystring, como? mode = redraw
Ver también: https://stackoverflow.com/questions/4037212 – hippietrail