Pencere yeniden boyutlandırıldığında tuvalin dinamik olarak nasıl uyarlanacağına dair daha genel soruyu cevaplayacağım. Kabul edilen cevap, genişliğin ve yüksekliğin her ikisinin de% 100 olması gerektiği, bu da istenen kanvasın en boy oranını değiştireceği durumu uygun şekilde ele alır. Birçok kullanıcı, en boy oranına dokunmadan tuvalin yeniden boyutlandırılmasında yeniden boyutlandırılmasını isteyecektir. Bu tam bir soru değil, ama soruyu biraz daha genel bir bağlama sokarak "uyuyor".
Pencerenin bir en boy oranı (genişlik / yükseklik) ve tuval nesnesi de olacaktır. Bu iki en-boy oranının birbiriyle ilişkisini nasıl istediğinizi açıklığa kavuşturmanız gereken bir şey var, bu soruya "tek beden herkese uyar" diye bir cevap yok - Neler yapabileceğinize dair bazı genel durumlardan geçeceğim istemek.
Açık olmanız gereken en önemli şey: html canvas nesnesinin bir width özelliği ve height özelliği vardır; ve sonra aynı nesnenin css'si de bir width ve height özelliğine sahiptir. Bu iki genişlik ve yükseklik farklıdır, ikisi de farklı şeyler için yararlıdır.
Genişlik ve yükseklik özelliklerini değiştirmek, tuvalinizin boyutunu her zaman değiştirebileceğiniz bir yöntemdir, ancak daha sonra her şeyi yeniden boyamanız gerekir, bu da zaman alır ve her zaman gerekli değildir, çünkü başarabileceğiniz bir miktar boyut değişikliği css öznitelikleri aracılığıyla, bu durumda tuvali yeniden çizmezsiniz.
Pencere yeniden boyutlandırmasında olmasını isteyebileceğiniz 4 durum görüyorum (tümü tam ekran tuval ile başlıyor)
1: genişliğin% 100 kalmasını ve en boy oranının olduğu gibi kalmasını istiyorsunuz. Bu durumda, tuvali yeniden çizmenize gerek yoktur; bir pencere yeniden boyutlandırma işleyicisine bile ihtiyacınız yoktur. Tum ihtiyacin olan sey
$(ctx.canvas).css("width", "100%");
Burada ctx tuval ortamınızdır. keman: resize
2: genişlik ve yüksekliğin her ikisinin de% 100 kalmasını istiyorsunuz ve en boy oranındaki değişimin, uzatılmış bir görüntü efekti olmasını istiyorsunuz. Şimdi, tuvali yeniden çizmeniz gerekmiyor, ancak bir pencere yeniden boyutlandırma işleyicisine ihtiyacınız var. İşleyicide,
$(ctx.canvas).css("height", window.innerHeight);
keman: messWithAspectratio
3: genişlik ve yüksekliğin% 100 kalmasını istiyorsunuz, ancak en boy oranındaki değişimin cevabı görüntüyü uzatmaktan farklı bir şey. Sonra yeniden çizmeniz ve kabul edilen cevapta özetlenen şekilde yapmanız gerekir.
keman: redraw
4: genişlik ve yüksekliğin sayfa yükünde% 100 olmasını istiyorsunuz, ancak daha sonra sabit kalın (pencere yeniden boyutlandırmasına tepki yok).
keman: sabit
Modun ayarlandığı satır 63 dışındaki tüm kemanlar aynı koda sahiptir. Yerel makinenizde çalıştırmak için keman kodunu da kopyalayabilirsiniz; bu durumda, modu bir sorgu dizesi bağımsız değişkeni ile? Mode = redraw olarak seçebilirsiniz.