Я відповім на більш загальне питання про те, як полотно динамічно адаптуватися за розмірами під розміром вікна. Прийнята відповідь належним чином обробляє той випадок, коли ширина та висота повинні бути 100%, що саме просили, але який також змінить співвідношення сторін полотна. Багато користувачів захочуть, щоб полотно змінило розмір вікна, але при цьому зберігати співвідношення сторін не слід. Це не точне запитання, але воно "вписується", просто ставлячи питання в дещо більш загальний контекст.
Вікно матиме певне співвідношення сторін (ширина / висота), і так буде об’єкт полотна. Як ви хочете, щоб ці два співвідношення сторін співвідносилися один з одним, вам потрібно буде зрозуміти, на це питання немає відповіді "один розмір, який відповідає всім" - я перегляну кілька загальних випадків того, що ви могли б хочу.
Найголовніше, про що вам має бути зрозуміло: об’єкт полотна html має атрибут ширини та атрибут висоти; а потім, css того ж об'єкта також має атрибут ширини та висоти. Ці дві ширини і висоти різні, обидві корисні для різних речей.
Зміна атрибутів ширини та висоти - це один метод, за допомогою якого ви завжди можете змінити розмір свого полотна, але тоді вам доведеться перефарбувати все, що займе час і не завжди потрібно, тому що певну зміну розміру ви можете досягти через атрибути css, і в цьому випадку ви не перемальовуєте полотно.
Я бачу 4 випадки того, що ви хочете зробити при зміні розміру вікна (усе починається з повного екрану полотна)
1: ви хочете, щоб ширина залишалася 100%, і ви хочете, щоб співвідношення сторін залишалося таким, яким воно було. У такому випадку вам не потрібно перемальовувати полотно; вам навіть не потрібен обробник розміру вікон. Все, що тобі потрібно, це
$(ctx.canvas).css("width", "100%");
де ctx - ваш полотно-контекст. скрипка: resizeByWidth
2: ви хочете, щоб ширина і висота залишалися на 100%, і ви хочете, щоб отримані зміни співвідношення сторін мали ефект розтягнутого зображення. Тепер вам все одно не потрібно переробляти полотно, але вам потрібен обробник розміру вікна. У обробнику, ти
$(ctx.canvas).css("height", window.innerHeight);
скрипка: messWithAspectratio
3: ви хочете, щоб ширина та висота залишалися на 100%, але відповідь на зміну співвідношення сторін - щось інше, ніж розтягування зображення. Потім потрібно перемалювати, і зробити це так, як викладено у прийнятій відповіді.
скрипка: перемалювати
4: ви хочете, щоб ширина і висота були 100% при завантаженні сторінки, але залишайтеся постійними після цього (жодної реакції на розмір вікна.
скрипка: фіксований
Усі загадки мають однаковий код, за винятком рядка 63, де встановлений режим. Ви також можете скопіювати код скрипку для запуску на локальній машині; у цьому випадку ви можете обрати режим через аргумент запиту, як? Mode = redraw