ฉันจะตอบคำถามทั่วไปเพิ่มเติมเกี่ยวกับวิธีปรับขนาดผ้าใบแบบไดนามิกเมื่อปรับขนาดหน้าต่าง คำตอบที่ได้รับการยอมรับอย่างเหมาะสมจะจัดการกับกรณีที่ทั้งความกว้างและความสูงควรเป็น 100% ซึ่งเป็นสิ่งที่ถูกถาม แต่จะเปลี่ยนอัตราส่วนภาพของผืนผ้าใบด้วย ผู้ใช้หลายคนต้องการให้ Canvas ปรับขนาดบนปรับขนาดหน้าต่าง แต่ในขณะที่รักษาอัตราส่วนกว้างยาวไว้ มันไม่ใช่คำถามที่แน่นอน แต่มัน "พอดีกับ" เพียงใส่คำถามในบริบททั่วไปที่กว้างขึ้นเล็กน้อย
หน้าต่างจะมีอัตราส่วนกว้างยาว (กว้าง / สูง) และวัตถุผ้าใบจะทำเช่นนั้น คุณต้องการให้อัตราส่วนทั้งสองนี้เกี่ยวข้องกันอย่างไรเป็นสิ่งหนึ่งที่คุณจะต้องชัดเจนไม่มี "คำตอบที่เหมาะกับทุกขนาด" สำหรับคำถามนั้น - ฉันจะพูดถึงกรณีทั่วไปของสิ่งที่คุณอาจจะรู้ ต้องการ.
สิ่งที่สำคัญที่สุดที่คุณต้องมีความชัดเจนเกี่ยวกับ: วัตถุผ้าใบ html มีคุณลักษณะความกว้างและคุณลักษณะความสูง; จากนั้น css ของวัตถุเดียวกันก็มีแอตทริบิวต์ width และ height ความกว้างและความสูงทั้งสองนั้นต่างกันทั้งสองมีประโยชน์สำหรับสิ่งต่าง ๆ
การเปลี่ยนคุณสมบัติความกว้างและความสูงเป็นวิธีหนึ่งที่คุณสามารถเปลี่ยนขนาดผืนผ้าใบของคุณได้ตลอดเวลา แต่จากนั้นคุณจะต้องทาสีใหม่ทุกอย่างซึ่งจะใช้เวลาและไม่จำเป็นเสมอไปเพราะการเปลี่ยนแปลงขนาดบางอย่างคุณสามารถทำได้ ผ่านแอ็ตทริบิวต์ css ซึ่งในกรณีนี้คุณไม่ต้องวาด Canvas ใหม่
ฉันเห็น 4 กรณีของสิ่งที่คุณอาจต้องการให้เกิดขึ้นในการปรับขนาดหน้าต่าง (ทั้งหมดเริ่มต้นด้วย Canvas แบบเต็มหน้าจอ)
1: คุณต้องการให้ความกว้างคงอยู่ 100% และคุณต้องการให้อัตราส่วนนั้นคงเดิม ในกรณีนี้คุณไม่จำเป็นต้องวาดภาพวาดบนผ้าใบอีก คุณไม่จำเป็นต้องใช้ตัวจัดการปรับขนาดหน้าต่าง สิ่งที่คุณต้องการคือ
$(ctx.canvas).css("width", "100%");
โดยที่ ctx คือบริบทผ้าใบของคุณ ซอ: ปรับขนาดโดยไวด์ ธ
2: คุณต้องการให้ทั้งความกว้างและความสูงอยู่ที่ 100% และคุณต้องการให้การเปลี่ยนแปลงอัตราส่วนภาพมีผลต่อภาพที่ขยายออก ตอนนี้คุณยังไม่จำเป็นต้องวาดภาพวาดผ้าใบอีกต่อไป แต่คุณต้องมีตัวปรับขนาดหน้าต่าง ในตัวจัดการคุณทำ
$(ctx.canvas).css("height", window.innerHeight);
ซอ: messWithAspectratio
3: คุณต้องการให้ทั้งความกว้างและความสูงอยู่ที่ 100% แต่คำตอบของการเปลี่ยนแปลงอัตราส่วนคือสิ่งที่แตกต่างจากการยืดภาพ จากนั้นคุณต้องวาดใหม่และทำตามที่อธิบายไว้ในคำตอบที่ยอมรับ
ซอ: วาดใหม่
4: คุณต้องการให้ความกว้างและความสูงเท่ากับ 100% สำหรับการโหลดหน้า แต่คงที่หลังจากนั้น (คงที่ไม่ตอบสนองต่อการปรับขนาดหน้าต่าง
ซอ: แก้ไขแล้ว
ซอทั้งหมดมีรหัสเหมือนกันยกเว้นบรรทัดที่ 63 ซึ่งตั้งโหมดไว้ นอกจากนี้คุณยังสามารถคัดลอกรหัสซอเพื่อเรียกใช้บนเครื่องท้องถิ่นของคุณซึ่งในกรณีนี้คุณสามารถเลือกโหมดผ่านการโต้แย้งสตริงการสืบค้นเป็น? mode = redraw