Vẽ đồ họa bằng Canvas trong HTML JavaScript
Javascript căn bản | by
Trong thế giới phát triển web hiện nay, việc tạo và hiển thị đồ họa trực quan đã trở thành một phần quan trọng không thể thiếu trong hầu hết các ứng dụng và trang web. Từ việc vẽ các biểu đồ, hình ảnh động đến xây dựng các trò chơi trực tuyến, khả năng vẽ đồ họa trên web mang lại trải nghiệm người dùng phong phú và thú vị. Một trong những công cụ mạnh mẽ nhất mà HTML cung cấp để thực hiện các tác vụ này chính là thẻ <canvas>
.
Thẻ <canvas>
trong HTML5 cho phép chúng ta vẽ đồ họa trực tiếp vào trang web bằng JavaScript, tạo ra những hình ảnh động, tương tác hoặc thậm chí là các trò chơi 2D phức tạp. Với khả năng vẽ trên một vùng không gian 2D hoặc 3D, thẻ <canvas>
đã mở ra vô vàn cơ hội sáng tạo cho các nhà phát triển web.
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng <canvas>
để vẽ đồ họa, từ những thao tác cơ bản như vẽ hình chữ nhật, đường thẳng, đến việc tạo ra các hiệu ứng động và tương tác phức tạp. Cùng với đó, chúng ta sẽ tìm hiểu các phương thức, kỹ thuật nâng cao để tận dụng tối đa khả năng của thẻ <canvas>
trong việc xây dựng các ứng dụng đồ họa trên web.
Tìm hiểu về phần tử <canvas> trong JavaScript
Cấu trúc cơ bản của thẻ <canvas>
Thẻ <canvas>
là một phần tử HTML5 cho phép vẽ đồ họa trực tiếp trên trang web. Nó không hiển thị gì nếu không có JavaScript để thao tác với nó. Đây là một công cụ mạnh mẽ giúp bạn có thể tạo ra các hình ảnh động, biểu đồ, hoặc trò chơi đơn giản mà không cần phải sử dụng bất kỳ plugin hay thư viện bên ngoài nào.
Cấu trúc cơ bản của thẻ <canvas>
như sau:
<canvas id="myCanvas" width="500" height="400"></canvas>
-
id: Dùng để định danh phần tử
<canvas>
, giúp dễ dàng truy cập từ JavaScript. -
width và height: Chỉ định kích thước của vùng vẽ (canvas). Kích thước này được tính bằng pixel và là kích thước của phần tử
<canvas>
trong HTML.-
Lưu ý: Kích thước này có thể được thiết lập qua CSS, nhưng khi vẽ lên canvas, kích thước thực tế sẽ được xác định bởi các thuộc tính
width
vàheight
của thẻ HTML<canvas>
.
-
Lấy context vẽ
Để bắt đầu vẽ trên canvas, bạn cần lấy "context" vẽ từ phần tử <canvas>
. Context chính là đối tượng JavaScript cho phép bạn vẽ và thao tác với nội dung bên trong canvas. Có hai loại context chính:
-
2D Context: Dùng để vẽ đồ họa 2D, là loại context phổ biến nhất.
-
WebGL Context: Dùng cho đồ họa 3D, giúp bạn làm việc với WebGL, một API JavaScript để render đồ họa 3D trong trình duyệt.
Để lấy context vẽ 2D, bạn sử dụng phương thức getContext()
của đối tượng <canvas>
, như sau:
var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d");
Ở đây:
-
document.getElementById("myCanvas")
: Truy cập vào phần tử<canvas>
qua ID. -
getContext("2d")
: Lấy context 2D để vẽ đồ họa 2D.
Thuộc tính và các lưu ý
width và height của canvas
-
width và height quyết định kích thước của không gian vẽ thực tế trên canvas, tức là kích thước mà bạn sẽ vẽ lên. Đây là kích thước của vùng vẽ trên canvas và có đơn vị tính là pixel.
CSS vs. thuộc tính HTML: Mặc dù bạn có thể thay đổi kích thước của phần tử canvas qua CSS, nhưng điều này chỉ ảnh hưởng đến giao diện của canvas (kích thước hiển thị trên trang web). Kích thước vẽ thực sự của canvas (kích thước thực tế khi bạn vẽ lên) vẫn được xác định bởi thuộc tính width
và height
của thẻ <canvas>
trong HTML.
<canvas id="myCanvas" width="800" height="600"></canvas>
Khi bạn sử dụng CSS để thay đổi kích thước:
#myCanvas { width: 400px; height: 300px; }
Thực tế, mặc dù kích thước hiển thị trên trang web là 400x300px, nhưng không gian vẽ của canvas vẫn là 800x600px, nếu bạn không thay đổi thuộc tính width
và height
trong HTML.
Lưu ý khi thay đổi kích thước
Khi bạn thay đổi kích thước của canvas, toàn bộ nội dung đã vẽ trên canvas sẽ bị xóa và không thể khôi phục lại. Điều này xảy ra vì khi thay đổi kích thước canvas, tất cả các pixel vẽ sẽ bị reset lại. Do đó, khi thay đổi kích thước canvas trong khi làm việc với đồ họa, bạn cần đảm bảo rằng bạn không mất dữ liệu quan trọng hoặc bạn phải vẽ lại các đối tượng sau khi thay đổi kích thước.
Ví dụ:
<canvas id="myCanvas" width="500" height="400"></canvas>
Nếu bạn thay đổi kích thước của canvas trong JavaScript sau khi đã vẽ nội dung lên nó:
canvas.width = 800; // Kích thước vẽ thực sẽ được reset, toàn bộ nội dung bị mất
Điều này sẽ làm mất tất cả nội dung đã vẽ trên canvas. Do đó, nếu cần thay đổi kích thước, bạn nên xử lý vẽ lại hoặc lưu trữ nội dung trước khi thay đổi kích thước.
Các thao tác vẽ cơ bản với Canvas JavaScript
Canvas API cung cấp nhiều phương thức để vẽ các hình dạng cơ bản, tô màu, vẽ văn bản và tạo các hiệu ứng đồ họa. Dưới đây là các thao tác cơ bản nhất mà bạn có thể sử dụng khi làm việc với Canvas.
Các lệnh vẽ hình cơ bản
Hình chữ nhật
-
fillRect(x, y, width, height): Vẽ một hình chữ nhật có màu nền (fill) tại vị trí
(x, y)
với chiều rộngwidth
và chiều caoheight
.
ctx.fillStyle = 'blue'; ctx.fillRect(50, 50, 200, 100); // Vẽ hình chữ nhật màu xanh
strokeRect(x, y, width, height): Vẽ một hình chữ nhật chỉ với viền (stroke), không có màu nền. Các thông số cũng giống như fillRect
.
ctx.strokeStyle = 'red'; ctx.lineWidth = 5; ctx.strokeRect(50, 50, 200, 100); // Vẽ hình chữ nhật chỉ có viền đỏ