Getting started with the HTML canvas

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
Search for a command to run...

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
Thanks for writing this article, Chris Bongers. 👏
I am sure many beginner web developers will learn more about HTML canvas from this.
I'm a total beginner when it comes to canvas, perhaps used it once in school. But never ever for actual development, so doing a series on it :D
In this series we will get started with the canvas element and use JavaScript to make some amazing art.
Yesterday we got started on our basic canvas course. Thinking about the project I want to do, I need to export the canvas as an image. So how do we convert the canvas to an image? There are actually two ways of doing this, and we will explore both. S...
Most of you know me for my consistency, a golden arrow in my blog series. I've written 1000 articles in 1008 days! Almost an article a day, and my honeymoon was the only holiday I ever took. I'm super proud of this achievement; it has been a fantasti...

It's not the first time I'll be talking about community. I think it's an essential aspect of any successful tool. This shows in my previous explorations of Astro, Medusa, and now Vendure as well. All these products thrive in a super open, welcoming, ...

The cool part about Vendure is how easy it is to set up and how abstract each layer is. Basically, we get the following elements: External database Server Worker Admin UI Frontend While this is amazing, it also brings a bit of complexity when it co...

The previous article looked at customizing Vendure on a data and process level. In this article, we'll look at customizing emails, as they are often a big part of a webshop system. We'll be looking at two different layers of customization for customi...

Even though Vendure is a pretty significant project out of the box, in some cases, we might want to go in and modify some elements to work to our specific use case. In this article, I'll take a high-level look at some elements we can customize within...

My confession: I've never used canvas before this article.
I just have a cool idea in my head, which needs Canvas, so why not document my explorations using the HTML canvas element.
<canvas> is an HTML element which can be used to draw graphics via JavaScript.
It can do quite a lot of cool things, including;
Today, we'll get started by exploring some of it's basic options.
It will look like this:

To create our first canvas, we don't need to do much:
<canvas id="canvas">
This will create a default canvas element, which is 300x150 pixels. We can set the width and height on a canvas element, or style it via CSS.
It doesn't look like much, since we haven't rendered anything on it.
To add our first shape we need to use JavaScript to first get our canvas element.
const canvas = document.getElementById('canvas');
Now we have our actual canvas element, we need to specify it's context:
const ctx = canvas.getContext('2d');
We can also get the 3D Engine, but that's for a later article.
Ok, let's add a square, maybe?
ctx.fillRect(50, 50, 100, 100);
The parameters we are sending are as follows (x, y, width, height).
Cool, so now we see our first rectangle!
There are quite a lot of shapes we can make with the Canvas;
With that, we can create any shape. Here are some examples:
// Cirlce
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI);
ctx.stroke();
The parameters for arc are (x, y, Radius, startingAngle, endAngle)
// Triangle
ctx.beginPath();
ctx.moveTo(200, 75);
ctx.lineTo(100, 75);
ctx.lineTo(100, 25);
ctx.fill();
As for the move argument is accepts the (x, y) coordinates. And the lineTo (x, y) from where ever the moveTo is set.
// Hearth
ctx.beginPath();
ctx.moveTo(75, 40);
ctx.bezierCurveTo(75, 37, 70, 25, 50, 25);
ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5);
ctx.bezierCurveTo(20, 80, 40, 102, 75, 120);
ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5);
ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25);
ctx.bezierCurveTo(85, 25, 75, 37, 75, 40);
ctx.stroke();
The bezierCurveTo accepts (x of control point 1, y of control point 1, x of control point 2, y of control point 2, x ending, y ending)
Find these on the following Codepen.
Note: We will continue exploring in other articles!
The canvas element is well supported these days and is defiantly a good option if you want to draw vectors on screen.

Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter