Saya akan menjawab pertanyaan yang lebih umum tentang bagaimana mengubah ukuran kanvas secara dinamis sesuai ukuran jendela. Jawaban yang diterima dengan tepat menangani kasus di mana lebar dan tinggi seharusnya 100%, yang diminta, tetapi juga akan mengubah rasio aspek kanvas. Banyak pengguna menginginkan ukuran kanvas pada ukuran jendela, tetapi dengan tetap menjaga rasio aspek tidak tersentuh. Ini bukan pertanyaan yang tepat, tetapi "cocok", hanya menempatkan pertanyaan ke dalam konteks yang sedikit lebih umum.
Jendela akan memiliki beberapa aspek rasio (lebar / tinggi), dan begitu juga objek kanvas. Bagaimana Anda ingin kedua aspek rasio ini saling berhubungan adalah satu hal yang harus Anda jelaskan, tidak ada jawaban "satu ukuran cocok untuk semua" untuk pertanyaan itu - saya akan membahas beberapa kasus umum tentang apa yang mungkin Anda lakukan ingin.
Paling penting Anda harus jelas tentang: objek kanvas html memiliki atribut lebar dan atribut tinggi; dan kemudian, css dari objek yang sama juga memiliki atribut width dan height. Kedua lebar dan tinggi itu berbeda, keduanya berguna untuk hal yang berbeda.
Mengubah atribut lebar dan tinggi adalah salah satu metode yang dengannya Anda selalu dapat mengubah ukuran kanvas Anda, tetapi kemudian Anda harus mengecat semuanya, yang akan memakan waktu dan tidak selalu diperlukan, karena sejumlah perubahan ukuran yang dapat Anda lakukan melalui atribut css, dalam hal ini Anda tidak menggambar ulang kanvas.
Saya melihat 4 kasus apa yang Anda mungkin ingin terjadi pada ukuran jendela (semua dimulai dengan kanvas layar penuh)
1: Anda ingin lebar tetap 100%, dan Anda ingin rasio aspek tetap seperti semula. Dalam hal ini, Anda tidak perlu menggambar ulang kanvas; Anda bahkan tidak memerlukan penangan ukuran jendela. Yang kamu butuhkan adalah
$(ctx.canvas).css("width", "100%");
di mana ctx adalah konteks kanvas Anda. biola: resizeByWidth
2: Anda ingin lebar dan tinggi tetap 100%, dan Anda ingin perubahan rasio aspek yang dihasilkan memiliki efek gambar yang ditarik keluar. Sekarang, Anda masih tidak perlu menggambar ulang kanvas, tetapi Anda perlu penangan ukuran jendela. Di pawang, Anda lakukan
$(ctx.canvas).css("height", window.innerHeight);
biola: messWithAspectratio
3: Anda ingin lebar dan tinggi tetap 100%, tetapi jawaban untuk perubahan rasio aspek adalah sesuatu yang berbeda dari peregangan gambar. Maka Anda perlu menggambar ulang, dan melakukannya dengan cara yang dijelaskan dalam jawaban yang diterima.
biola: gambar ulang
4: Anda ingin lebar dan tinggi 100% memuat halaman, tetapi tetap konstan setelahnya (tidak ada reaksi terhadap perubahan ukuran jendela.
biola: diperbaiki
Semua biola memiliki kode yang identik, kecuali untuk baris 63 tempat mode diatur. Anda juga dapat menyalin kode biola untuk dijalankan di mesin lokal Anda, dalam hal ini Anda dapat memilih mode melalui argumen querystring, seperti? Mode = redraw