Contestaré la pregunta más general de cómo hacer que un lienzo se adapte dinámicamente en tamaño al cambiar el tamaño de la ventana. La respuesta aceptada maneja adecuadamente el caso en el que 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 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 el objeto del lienzo. La forma en que desea que estas dos relaciones de aspecto se relacionen entre sí es una cosa que tendrá que tener claro, no hay una respuesta de "talla única para todos" a esta pregunta. Revisaré algunos casos comunes de lo que podría querer.
Lo más importante que debe tener claro: el objeto de lienzo html tiene un atributo de ancho y un atributo de altura; y luego, el css del mismo objeto también tiene un atributo de ancho y alto. 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, porque puede lograr una cierta cantidad de cambio de tamaño. a través de los atributos css, en cuyo caso no vuelve a dibujar el lienzo.
Veo 4 casos de lo que podría querer que suceda en el cambio de tamaño de la ventana (todos comenzando con un lienzo de pantalla completa)
1: desea que el ancho permanezca al 100%, y desea que la relación de aspecto permanezca como estaba. 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 necesitas es
$(ctx.canvas).css("width", "100%");
donde ctx es su contexto de lienzo. violín: resizeByWidth
2: desea que el ancho y la altura se mantengan al 100%, y desea que el cambio resultante en la relación de aspecto tenga el efecto de una imagen estirada. Ahora, aún no necesita volver a dibujar el lienzo, pero necesita un controlador de cambio de tamaño de ventana. En el controlador, lo haces
$(ctx.canvas).css("height", window.innerHeight);
violín: messWithAspectratio
3: desea que el ancho y la altura se mantengan al 100%, pero la respuesta al cambio en la relación de aspecto es algo diferente de estirar la imagen. Luego, debe volver a dibujar y hacerlo de la manera que se describe en la respuesta aceptada.
violín: redibujar
4: desea que el ancho y la altura sean del 100% en la carga de la página, pero permanezca constante a partir de entonces (no hay reacción al cambio de tamaño de la ventana.
violín: fijo
Todos los violines tienen un código idéntico, excepto la línea 63 donde se establece el modo. También puede copiar el código de violín para ejecutarlo en su máquina local, en cuyo caso puede seleccionar el modo mediante un argumento de cadena de consulta, como? Mode = redraw