Je vais répondre à la question plus générale de la façon d'avoir une toile d'adapter dynamiquement la taille lors de la fenêtre de redimensionnement. La accepté de répondre de façon appropriée traite le cas où la largeur et la hauteur sont censés être de 100%, ce qui était demandé, mais qui va aussi changer le ratio d'aspect de la toile. De nombreux utilisateurs veulent que la toile de redimensionner la fenêtre de redimensionnement, mais tout en gardant le ratio d'aspect intact. Ce n'est pas la question exacte, mais il "s'adapte", vient de mettre la question un peu plus générale.
La fenêtre aura un certain rapport d'aspect (hauteur / largeur), et ne sera donc l'objet canvas. Comment vous voulez que ces deux proportions se rapportent les uns aux autres est une chose que vous devez être clair sur, il n'existe pas de "one size fits all" la réponse à cette question, je vais passer par certaines des cas fréquents de ce que vous voulez.
La plus importante chose que vous devez être clair au sujet de: le html en toile objet possède un attribut width et un height attribut; et puis, le css de la même objet a également une largeur et une hauteur d'attribut. Ces deux largeurs et les hauteurs sont différentes, les deux sont utiles pour différentes choses.
Modification de la largeur et de la hauteur des attributs est une méthode avec laquelle vous pouvez toujours modifier la taille de votre toile, mais vous aurez à repeindre tout ce qui va prendre du temps et n'est pas toujours nécessaire, parce que, d'une certaine quantité de changement de taille que vous pouvez accomplir via le css attributs, dans ce cas, vous ne pas redessiner la toile.
Je vois 4 cas de ce que vous pourriez vouloir pour arriver sur la fenêtre de redimensionnement (tout en commençant avec un plein écran de la toile)
1: vous souhaitez que la largeur de rester à 100%, et vous voulez le ratio d'aspect de rester comme il était. Dans ce cas, vous n'avez pas besoin de redessiner la toile, vous n'avez même pas besoin de redimensionner une fenêtre de gestionnaire. Tous vous avez besoin est
$(ctx.canvas).css("width", "100%");
où ctx est votre toile contexte.
violon: resizeByWidth
2: vous voulez de la largeur et de la hauteur à la fois de rester 100%, et vous voulez le changement résultant de l'aspect ratio d'avoir l'effet d'une étendu de l'image. Maintenant, vous n'avez toujours pas besoin de redessiner la toile, mais vous avez besoin de redimensionner une fenêtre de gestionnaire. Dans le gestionnaire, vous ne
$(ctx.canvas).css("height", window.innerHeight);
violon: messWithAspectratio
3: vous voulez de la largeur et de la hauteur à la fois de rester 100%, mais la réponse à la variation de ratio d'aspect est quelque chose de différent de l'étirement de l'image. Ensuite, vous avez besoin de rafraîchissement, et de le faire de la manière décrite dans la accepté de répondre.
violon: redessiner
4: vous souhaitez que la largeur et la hauteur de 100% au chargement de la page, mais rester constant par la suite (pas de réaction à la fenêtre de redimensionnement.
violon: fixe
Tous les violons ont un code identique, sauf pour la ligne 63 lorsque le mode est réglé. Vous pouvez également copier le violon de code à exécuter sur votre machine locale, dans ce cas, vous pouvez sélectionner le mode par l'intermédiaire d'une chaîne de requête argument, que ?mode=redessiner