Canvas API

Frontend SELF VI
Mức độ , Bài học
Có sẵn

10.1 Cơ bản việc làm việc với Canvas

Canvas API cung cấp cho lập trình viên các công cụ tốt để tạo đồ họa 2D và animation trong ứng dụng web. Trong bài giảng này, chúng ta sẽ xem xét các kiến thức cơ bản về làm việc với Canvas API, bao gồm tạo phần tử, vẽ đồ họa và tạo animation.

Tạo phần tử <canvas>

Phần tử <canvas> trong HTML được sử dụng để tạo một vùng vẽ, nơi có thể thực hiện các thao tác đồ họa khác nhau:

HTML
    
      <canvas id="myCanvas" width="800" height="600"></canvas>
    
  

Lấy ngữ cảnh vẽ

Để thực hiện các thao tác vẽ trên phần tử <canvas>, bạn cần lấy ngữ cảnh vẽ. Đối với đồ họa 2D sử dụng ngữ cảnh 2d:

JavaScript
    
      const canvas = document.getElementById('myCanvas');
      const ctx = canvas.getContext('2d');
    
  

10.2 Vẽ trên Canvas

1. Hình chữ nhật

Canvas API cung cấp các phương thức để vẽ hình chữ nhật đổ đầy và có viền.

Hình chữ nhật đổ đầy — fillRect:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.fillStyle = 'blue';
            ctx.fillRect(10, 10, 150, 100);
          </script>
        </body>
      </html>
    
  

Hình chữ nhật có viền — strokeRect:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.strokeStyle = 'red';
            ctx.strokeRect(200, 10, 150, 100);
          </script>
        </body>
      </html>
    
  

Xóa vùng

Phương thức clearRect được sử dụng để xóa một vùng nhất định:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.strokeStyle = 'red';
            ctx.strokeRect(200, 10, 150, 100);

            ctx.clearRect(0, 0, 800, 600);
          </script>
        </body>
      </html>
    
  

2. Đường thẳng

Để vẽ đường thẳng, sử dụng phương thức beginPath để bắt đầu một đường dẫn mới và các phương thức moveTolineTo để xác định tọa độ của đường thẳng:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.beginPath();
            ctx.moveTo(50, 150);
            ctx.lineTo(250, 150);
            ctx.lineTo(150, 300);
            ctx.closePath();
            ctx.stroke();
          </script>
        </body>
      </html>
    
  

3. Hình tròn và cung

Phương thức arc được sử dụng để vẽ hình tròn và cung:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.beginPath();
            ctx.arc(400, 75, 50, 0, Math.PI * 2);
            ctx.fillStyle = 'green';
            ctx.fill();
          </script>
        </body>
      </html>
    
  

4. Văn bản

Các phương thức fillTextstrokeText được sử dụng để vẽ văn bản:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            ctx.font = '30px Arial';
            ctx.fillStyle = 'black';
            ctx.fillText('Hello Canvas', 10, 350);
          </script>
        </body>
      </html>
    
  

5. Gradient

Canvas API hỗ trợ tạo gradient tuyến tính và gradient hình tròn.

Gradient tuyến tính:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');
            const gradient = ctx.createLinearGradient(0, 0, 200, 0);

            gradient.addColorStop(0, 'red');
            gradient.addColorStop(1, 'blue');

            ctx.fillStyle = gradient;
            ctx.fillRect(10, 10, 200, 100);
          </script>
        </body>
      </html>
    
  

Gradient hình tròn:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');
            const radialGradient = ctx.createRadialGradient(400, 200, 20, 400, 200, 100);

            radialGradient.addColorStop(0, 'yellow');
            radialGradient.addColorStop(1, 'green');

            ctx.fillStyle = radialGradient;
            ctx.fillRect(300, 100, 200, 200);
          </script>
        </body>
      </html>
    
  

6. Hình ảnh

Phương thức drawImage được sử dụng để vẽ hình ảnh lên Canvas:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');
            const img = new Image();

            img.onload = function() {
              ctx.drawImage(img, 256, 256);
            };

            img.src = 'https://cdn.javarush.com/images/article/ebb06cf3-0e04-45bd-a33e-31fe096fd323/256.jpeg';
          </script>
        </body>
      </html>
    
  
HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');
            const img = new Image();

            img.onload = function() {
              ctx.drawImage(img, 256, 256);
            };

            img.src = 'path/to/image-1.jpg';
          </script>
        </body>
      </html>
    
  

10.3 Animation trên Canvas

Để tạo animation, sử dụng phương thức requestAnimationFrame, cái mà gọi hàm được chỉ định để vẽ khung hình mới của animation.

1. Cơ bản về animation

Ví dụ về animation đơn giản:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');
            let x = 0;
            let y = 0;

            function animate() {
              ctx.clearRect(0, 0, canvas.width, canvas.height);

              ctx.fillStyle = 'blue';
              ctx.fillRect(x, y, 50, 50);

              x += 2;
              y += 2;

              requestAnimationFrame(animate);
            }

            animate();
          </script>
        </body>
      </html>
    
  

2. Animation phức tạp

Ví dụ về animation hình tròn:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            let angle = 0;

            function animateCircle() {
              ctx.clearRect(0, 0, canvas.width, canvas.height);

              const centerX = canvas.width / 2;
              const centerY = canvas.height / 2;
              const radius = 50;

              ctx.beginPath();
              ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);
              ctx.fillStyle = 'blue';
              ctx.fill();

              ctx.beginPath();
              ctx.arc(centerX + Math.cos(angle) * 100, centerY + Math.sin(angle) * 100, radius, 0, Math.PI * 2);
              ctx.fillStyle = 'red';
              ctx.fill();

              angle += 0.05;

              requestAnimationFrame(animateCircle);
            }

            animateCircle();
          </script>
        </body>
      </html>
    
  

3. Sử dụng bộ hẹn giờ

Để tạo animation, bạn cũng có thể sử dụng các phương thức setIntervalsetTimeout.

Ví dụ về animation sử dụng setInterval:

HTML
    
      <html>
        <head>
          <title>Tài liệu</title>
        </head>
        <body>
          <canvas id="myCanvas" width="800" height="600"></canvas>

          <script>
            const canvas = document.getElementById('myCanvas');
            const ctx = canvas.getContext('2d');

            let x = 0;
            let y = 0;

            function draw() {
              ctx.clearRect(0, 0, canvas.width, canvas.height);

              ctx.fillStyle = 'blue';
              ctx.fillRect(x, y, 50, 50);

              x += 2;
              y += 2;
            }

            setInterval(draw, 30);
          </script>
        </body>
      </html>
    
  
1
Опрос
DOM-Sự kiện,  42 уровень,  4 лекция
недоступен
DOM-Sự kiện
DOM-Sự kiện
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION