Odpowiem na bardziej ogólne pytanie, jak dynamicznie dostosowywać rozmiar płótna po zmianie rozmiaru okna. Zaakceptowana odpowiedź odpowiednio obsługuje przypadek, w którym szerokość i wysokość mają wynosić 100%, o co pytano, ale co również zmieni proporcje płótna. Wielu użytkowników będzie chciało zmienić rozmiar płótna przy zmianie rozmiaru okna, ale zachowując współczynnik proporcji nietknięty. Nie jest to dokładne pytanie, ale „pasuje”, po prostu umieszczając pytanie w nieco bardziej ogólnym kontekście.
Okno będzie miało pewne proporcje (szerokość / wysokość), podobnie jak obiekt płótna. To, w jaki sposób chcesz, aby te dwa współczynniki kształtu odnosiły się do siebie, to jedna rzecz, którą musisz wyjaśnić, nie ma jednej odpowiedzi na to pytanie - omówię kilka typowych przypadków chcieć.
Najważniejsza rzecz, o której musisz wiedzieć: obiekt html canvas ma atrybut szerokości i atrybut wysokości; a następnie css tego samego obiektu ma również atrybut szerokości i wysokości. Te dwie szerokości i wysokości są różne, obie są przydatne do różnych rzeczy.
Zmiana atrybutów szerokości i wysokości to jedna z metod, dzięki której zawsze możesz zmienić rozmiar swojego płótna, ale wtedy będziesz musiał przemalować wszystko, co zajmie trochę czasu i nie zawsze jest konieczne, ponieważ możesz dokonać pewnej zmiany rozmiaru poprzez atrybuty css, w takim przypadku nie przerysujesz płótna.
Widzę 4 przypadki tego, co może się wydarzyć przy zmianie rozmiaru okna (wszystkie zaczynają się od płótna pełnoekranowego)
1: chcesz, aby szerokość pozostała 100% i chcesz, aby współczynnik proporcji pozostał taki, jaki był. W takim przypadku nie musisz przerysowywać płótna; nie potrzebujesz nawet obsługi zmiany rozmiaru okna. Wszystko czego potrzebujesz to
$(ctx.canvas).css("width", "100%");
gdzie ctx to kontekst twojego płótna. skrzypce: resizeByWidth
2: chcesz, aby szerokość i wysokość pozostały na 100%, i chcesz, aby wynikowa zmiana współczynnika proporcji miała efekt rozciągniętego obrazu. Teraz nadal nie musisz przerysowywać płótna, ale potrzebujesz programu obsługi zmiany rozmiaru okna. W programie obsługi tak
$(ctx.canvas).css("height", window.innerHeight);
skrzypce: messWithAspectratio
3: chcesz, aby szerokość i wysokość pozostały w 100%, ale odpowiedź na zmianę współczynnika kształtu jest czymś innym niż rozciągnięcie obrazu. Następnie musisz przerysować i zrób to w sposób opisany w zaakceptowanej odpowiedzi.
skrzypce: przerysuj
4: chcesz, aby szerokość i wysokość były równe 100% podczas ładowania strony, ale później pozostań na stałym poziomie (brak reakcji na zmianę rozmiaru okna.
skrzypce: naprawiono
Wszystkie skrzypce mają identyczny kod, z wyjątkiem linii 63, w której ustawiono tryb. Możesz również skopiować kod skrzypcowy, aby uruchomić go na komputerze lokalnym, w którym to przypadku możesz wybrać tryb za pomocą argumentu querystring, jak? Mode = redraw