Risponderò alla domanda più generale su come fare in modo che una tela si adatti dinamicamente alle dimensioni al ridimensionamento della finestra. La risposta accettata gestisce in modo appropriato il caso in cui sia la larghezza che l'altezza dovrebbero essere al 100%, il che è ciò che è stato richiesto, ma che cambierà anche le proporzioni della tela. Molti utenti vorranno ridimensionare la tela al ridimensionamento della finestra, ma mantenendo invariate le proporzioni. Non è la domanda esatta, ma "si adatta", inserendo la domanda in un contesto leggermente più generale.
La finestra avrà alcune proporzioni (larghezza / altezza), così come l'oggetto tela. Il modo in cui vuoi che questi due aspetti siano correlati l'uno con l'altro è una cosa di cui dovresti essere chiaro, non esiste una risposta "adatta per tutti" a questa domanda - Esaminerò alcuni casi comuni di ciò che potresti volere.
La cosa più importante di cui devi essere chiaro: l'oggetto canvas html ha un attributo di larghezza e un attributo di altezza; e poi, il CSS dello stesso oggetto ha anche un attributo di larghezza e altezza. Queste due larghezze e altezze sono diverse, entrambe sono utili per cose diverse.
La modifica degli attributi di larghezza e altezza è un metodo con cui puoi sempre cambiare la dimensione della tua tela, ma dovrai ridipingere tutto, il che richiederà tempo e non è sempre necessario, perché puoi apportare un po 'di cambiamento di dimensione tramite gli attributi css, nel qual caso non si ridisegna la tela.
Vedo 4 casi di ciò che potresti voler accadere sul ridimensionamento della finestra (tutti a partire da una tela a schermo intero)
1: vuoi che la larghezza rimanga al 100% e vuoi che le proporzioni rimangano com'erano. In tal caso, non è necessario ridisegnare la tela; non hai nemmeno bisogno di un gestore di ridimensionamento della finestra. Tutto ciò che serve è
$(ctx.canvas).css("width", "100%");
dove ctx è il contesto della tua tela. violino: resizeByWidth
2: si desidera che la larghezza e l'altezza rimangano entrambe al 100% e si desidera che la modifica risultante nelle proporzioni abbia l'effetto di un'immagine allungata. Ora, non è ancora necessario ridisegnare la tela, ma è necessario un gestore di ridimensionamento della finestra. Nel gestore, lo fai
$(ctx.canvas).css("height", window.innerHeight);
violino: messWithAspectratio
3: vuoi che la larghezza e l'altezza rimangano entrambe al 100%, ma la risposta al cambiamento nelle proporzioni è qualcosa di diverso dallo stiramento dell'immagine. Quindi è necessario ridisegnare e farlo nel modo indicato nella risposta accettata.
violino: redraw
4: vuoi che la larghezza e l'altezza siano al 100% al caricamento della pagina, ma rimani costante da allora in poi (nessuna reazione al ridimensionamento della finestra.
violino: fisso
Tutti i violini hanno un codice identico, ad eccezione della riga 63 in cui è impostata la modalità. Puoi anche copiare il codice del violino per eseguirlo sul tuo computer locale, nel qual caso puoi selezionare la modalità tramite un argomento querystring, come? Mode = redraw