HTML5 Canvas

HTML5 Canvas (<canvas>) - Drawing Graphics

HTML5 Canvas is a powerful element that lets you draw graphics right in your web browser. Whether you’re creating simple shapes, animations, or even interactive games, the <canvas> element provides a versatile space for your creative coding. In this article, we’ll explore the basics of the HTML5 Canvas, learn how to draw graphics using JavaScript, and see real-world examples that you can try out yourself.

Getting Started with HTML5 Canvas

To use the canvas, start by adding the <canvas> element to your HTML file. You can set its width and height attributes to define the drawing area.

<!DOCTYPE html>
<html>
  <head>
    <title>Canvas Example</title>
  </head>
  <body>
    <canvas id="myCanvas" width="500" height="400" style="border:1px solid #000000;">
      Your browser does not support the canvas element.
    </canvas>
  </body>
</html>

In this example, we create a canvas with a 500×400 pixel drawing area and a simple border to help visualize its edges. The text inside the canvas element is displayed only if the browser does not support HTML5 Canvas.

Drawing on the Canvas with JavaScript

Once you have the <canvas> element, you can access it using JavaScript and start drawing. Use the getContext('2d') method to get a reference to the 2D drawing context, which provides many drawing functions.

Drawing a Simple Rectangle

Let’s draw a rectangle on the canvas. Add the following script inside the <body> or just before the closing </body> tag:

<script>
  // Get the canvas element by its ID
  const canvas = document.getElementById('myCanvas');
  // Get the 2D drawing context
  const ctx = canvas.getContext('2d');

  // Set a fill color (blue) and draw a rectangle
  ctx.fillStyle = 'blue';
  ctx.fillRect(50, 50, 150, 100);
</script>

This script sets the fill color to blue and draws a rectangle starting at (50, 50) with a width of 150 pixels and a height of 100 pixels.

More Drawing Techniques

Drawing Lines and Paths

You can draw more complex shapes by combining paths. For example, to draw a simple triangle:

<script>
  // Begin a new path
  ctx.beginPath();
  // Move to the first point
  ctx.moveTo(250, 50);
  // Draw lines to the next points
  ctx.lineTo(300, 150);
  ctx.lineTo(200, 150);
  // Close the path to create the triangle
  ctx.closePath();
  // Set a stroke style and draw the outline
  ctx.strokeStyle = 'red';
  ctx.stroke();
</script>

This code creates a triangle with red borders. The beginPath() and closePath() functions help define the shape.

Using Colors and Gradients

You can also create gradients to add depth to your drawings:

<script>
  // Create a linear gradient
  const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
  // Define color stops
  gradient.addColorStop(0, 'magenta');
  gradient.addColorStop(0.5, 'blue');
  gradient.addColorStop(1, 'red');

  // Use the gradient as the fill style
  ctx.fillStyle = gradient;
  ctx.fillRect(50, 200, 400, 100);
</script>

This example creates a gradient that transitions from magenta to blue to red, and then fills a rectangle with it.

Real-World Examples

1. Drawing a Simple Bar Chart

Imagine you want to display data in a bar chart. You can dynamically draw bars based on your data values:

<script>
  // Example data
  const data = [50, 100, 150, 200, 250];

  // Loop through the data array and draw each bar
  data.forEach((value, index) => {
    ctx.fillStyle = 'green';
    // Calculate the position and dimensions for each bar
    const barWidth = 40;
    const spacing = 20;
    const x = index * (barWidth + spacing) + spacing;
    const y = canvas.height - value; // Draw from the bottom up
    ctx.fillRect(x, y, barWidth, value);
  });
</script>

This script uses a simple array of data values to draw a green bar for each number, representing the data visually.

2. Creating Simple Animations

Canvas isn’t just for static images—you can also animate drawings. For instance, let’s move a circle across the screen:

<script>
  let x = 0;
  const y = 100;
  const radius = 20;

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

    // Draw a circle at the current position
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2);
    ctx.fillStyle = 'purple';
    ctx.fill();

    // Update the x position
    x += 2;
    if (x > canvas.width + radius) {
      x = -radius;
    }

    // Call animate again to create a smooth animation
    requestAnimationFrame(animate);
  }

  // Start the animation
  animate();
</script>

This example uses the requestAnimationFrame method to update the circle’s position continuously, making it move across the canvas.

Conclusion

The HTML5 Canvas is an exciting tool for web developers, allowing you to draw shapes, create animations, and build interactive graphics right in your browser. With simple JavaScript functions, you can start creating everything from basic drawings to more complex visualizations and animations. Practice with these examples, and soon you’ll be comfortable using Canvas in your own projects.

Further Reading