Tôi sẽ trả lời câu hỏi chung hơn về làm thế nào để có một khung vẽ tự động thích ứng kích thước khi thay đổi kích thước cửa sổ. Câu trả lời được chấp nhận xử lý thích hợp trường hợp cả chiều rộng và chiều cao được cho là 100%, đó là những gì được yêu cầu, nhưng cũng sẽ thay đổi tỷ lệ khung hình của khung vẽ. Nhiều người dùng sẽ muốn thay đổi kích thước khung hình trên thay đổi kích thước cửa sổ, nhưng vẫn giữ nguyên tỷ lệ khung hình. Đây không phải là câu hỏi chính xác, nhưng nó "phù hợp", chỉ đặt câu hỏi vào một bối cảnh chung hơn một chút.
Cửa sổ sẽ có một số tỷ lệ khung hình (chiều rộng / chiều cao) và đối tượng canvas cũng vậy. Bạn muốn hai tỷ lệ khung hình này liên quan với nhau như thế nào là một điều bạn sẽ phải rõ ràng, không có câu trả lời "một kích thước phù hợp cho tất cả" cho câu hỏi đó - Tôi sẽ xem xét một số trường hợp phổ biến về những gì bạn có thể muốn
Điều quan trọng nhất bạn phải rõ ràng: đối tượng canvas html có thuộc tính width và thuộc tính height; và sau đó, css của cùng một đối tượng cũng có thuộc tính chiều rộng và chiều cao. Hai chiều rộng và chiều cao đó là khác nhau, cả hai đều hữu ích cho những thứ khác nhau.
Thay đổi các thuộc tính chiều rộng và chiều cao là một phương pháp mà bạn luôn có thể thay đổi kích thước của khung vẽ, nhưng sau đó bạn sẽ phải sơn lại mọi thứ, sẽ mất thời gian và không phải lúc nào cũng cần thiết, bởi vì một số lượng thay đổi kích thước bạn có thể thực hiện thông qua các thuộc tính css, trong trường hợp đó bạn không vẽ lại khung vẽ.
Tôi thấy 4 trường hợp về những gì bạn có thể muốn xảy ra trên thay đổi kích thước cửa sổ (tất cả bắt đầu bằng một khung hình toàn màn hình)
1: bạn muốn chiều rộng duy trì 100% và bạn muốn tỷ lệ khung hình được giữ nguyên. Trong trường hợp đó, bạn không cần vẽ lại khung vẽ; bạn thậm chí không cần một trình xử lý thay đổi kích thước cửa sổ. Tất cả bạn cần là
$(ctx.canvas).css("width", "100%");
trong đó ctx là bối cảnh vải của bạn. fiddle: thay đổi kích thướcByWidth
2: bạn muốn cả chiều rộng và chiều cao đều ở mức 100% và bạn muốn thay đổi kết quả về tỷ lệ khung hình để có hiệu ứng của hình ảnh kéo dài. Bây giờ, bạn vẫn không cần vẽ lại khung vẽ, nhưng bạn cần một trình xử lý thay đổi kích thước cửa sổ. Trong xử lý, bạn làm
$(ctx.canvas).css("height", window.innerHeight);
fiddle: messWithAspectratio
3: bạn muốn cả chiều rộng và chiều cao đều giữ nguyên 100%, nhưng câu trả lời cho sự thay đổi tỷ lệ khung hình là một cái gì đó khác với việc kéo dài hình ảnh. Sau đó, bạn cần vẽ lại, và làm theo cách được nêu trong câu trả lời được chấp nhận.
fiddle: vẽ lại
4: bạn muốn chiều rộng và chiều cao là 100% khi tải trang, nhưng không đổi sau đó (không có phản ứng thay đổi kích thước cửa sổ.
fiddle: đã sửa
Tất cả các câu đố có mã giống hệt nhau, ngoại trừ dòng 63 nơi chế độ được đặt. Bạn cũng có thể sao chép mã fiddle để chạy trên máy cục bộ của mình, trong trường hợp đó bạn có thể chọn chế độ thông qua đối số chuỗi truy vấn, như? Mode = vẽ lại