Introduction
JavaScript can be used to create and manipulate SVG (Scalable Vector Graphics) images, which are a type of vector image that can be resized without losing quality. SVG images are composed of shapes and paths and can be created using a variety of tools, including text editors, vector editing software, and JavaScript libraries.
Developed by the W3C, we can create scalable images that are lossless using the <svg>
element on our webpage. However, if we want to create SVG image using JavaScript, we have specific methods or string approaches we can apply. In this article, we will discuss a couple of ways to create SVG image using SVG elements.
Create SVG Image in JavaScript
We can create SVG images in JavaScript using different approaches which include creating the SVG using the built-in methods to SVG code strings.
Method-1: Using the createElementNS
method
One way to create an SVG image using JavaScript is to create an SVG <svg>
element via the createElementNS
method and then append child elements, such as <rect>
, <circle>
, or <path>
, to the <svg>
element. These child elements are used to create the shapes and paths that make up the image.
To illustrate how to create SVG image using JavaScript, we will create a simple square with a red color fill via the rect
attribute. Using the setAttribute()
method, we can set position and size of the rect
element. Finally, we append the SVG to the HTML document using the appendChild()
node method.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
<script>
// Create an SVG <svg> element
const svg = document.createElementNS(
"<http://www.w3.org/2000/svg>",
"svg"
);
// Set the width and height of the <svg> element
svg.setAttribute("width", "200");
svg.setAttribute("height", "200");
// Create a <rect> element
const rect = document.createElementNS(
"<http://www.w3.org/2000/svg>",
"rect"
);
// Set the position and size of the <rect> element
rect.setAttribute("x", "50");
rect.setAttribute("y", "50");
rect.setAttribute("width", "100");
rect.setAttribute("height", "100");
// Set the fill color of the <rect> element
rect.setAttribute("fill", "red");
// Append the <rect> element to the <svg> element
svg.appendChild(rect);
// Append the <svg> element to the document
document.body.appendChild(svg);
</script>
</html>
Output
Methpd-2: Using string of SVG Code with innerHTML
Another way to create an SVG image using JavaScript is to create a string of SVG code and then use innerHTML
to insert it into an HTML element. This can be useful for creating complex images with multiple shapes and paths.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="svg-container"></div>
</body>
<script>
// Create a string of SVG code
const svgCode =
'<svg width="200" height="200">' +
'<rect x="50" y="50" width="100" height="100" fill="red"/>' +
"</svg>";
// Get a reference to an HTML element
const container = document.querySelector("#svg-container");
// Insert the SVG code into the HTML element
container.innerHTML = svgCode;
</script>
</html>
Output
Method-3: Using third-party libraries
You can also use JavaScript libraries such as SVG.js, D3.js, Raphaël, and Snap.svg to create and manipulate SVG images. These libraries provide a wide range of tools and methods for creating, styling, and animating SVG images, and can be useful for creating interactive and animated data visualizations.
To show you how to make use of third-party using the SVG.js library. Before we can make use of the library, we can add the library via a CDN as below
<script src="<https://cdn.jsdelivr.net/npm/@svgdotjs/svg.js@3.0/dist/svg.min.js>"></script>
After, we can then include the library within our code environment and make use of its built-in method such as SVG()
and rect()
. Here is the code snippet to achieve a red box using the SVG.js library
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="<https://cdn.jsdelivr.net/npm/@svgdotjs/svg.js@3.0/dist/svg.min.js>"></script>
</head>
<body></body>
<script>
var draw = SVG().addTo("body").size(300, 300);
var rect = draw.rect(100, 100).attr({ fill: "red" });
</script>
</html>
Output
The addTo()
method adds the SVG image created to the HTML document body.
Create JavaScript SVG Animation
There are multiple ways to animate SVG elements in JavaScript. Some of the most common methods include:
- SMIL (Synchronized Multimedia Integration Language) - It is a specification for handling animation in SVG. SMIL allows you to animate the attributes of SVG elements using a simple set of elements and attributes. However, support for SMIL is limited, and it is not supported in some modern browsers.
- CSS - You can use CSS to animate SVG elements by applying CSS animations and transitions to SVG elements. This method is widely supported and works well for simple animations.
- JavaScript - You can use JavaScript to animate SVG elements by manipulating the attributes of SVG elements directly or by using a JavaScript animation library like GreenSock.
Here's an example that animates the width and height of an SVG rectangle element using CSS:
<svg viewBox="0 0 200 100">
<rect id="rect" x="10" y="20" width="50" height="30" fill="red"/>
</svg>
<style>
#rect{
transition: width 2s, height 2s;
}
</style>
<button onclick="document.getElementById('rect').style.width='100px';document.getElementById('rect').style.height='60px';">Animate</button>
In this example, the width and height of the rectangle element will be animated over 2 seconds when the button is clicked.
You can also use JavaScript animation libraries like GreenSock to create more complex animations.
<svg viewBox="0 0 200 100">
<rect id="rect" x="10" y="20" width="50" height="30" fill="red"/>
</svg>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.5.1/gsap.min.js"></script>
<script>
var rect = document.getElementById("rect");
gsap.to(rect, {duration: 2, width: "100px", height: "60px"});
</script>
This example use GreenSock library to animate width and height of rectangle on load.
In addition, you can also use the animate
method of the SVG elements to animate them.
<svg viewBox="0 0 200 100">
<rect id="rect" x="10" y="20" width="50" height="30" fill="red"/>
</svg>
<script>
var rect = document.getElementById("rect");
rect.animate({width:["50px","100px"],height:["30px","60px"]},2000);
</script>
This example uses the animate
method to animate the width and height of the rectangle over 2 seconds.
Summary
JavaScript can be used to create and manipulate SVG images, which are a type of vector image that can be resized without losing quality. SVG images can be created by creating an SVG <svg>
element and then appending child elements, such as <rect>
, <circle>
, or <path>
, to the <svg>
element. You can also create SVG images by creating a string of SVG code and then using innerHTML
to insert it into an HTML element.
And there are various libraries such as SVG.js, D3.js, Raphaël, and Snap.svg that can help you to create and manipulate SVG images in a more efficient and convenient way. These libraries provide a wide range of tools and methods for creating, styling, and animating SVG images, and can be useful for creating interactive and animated data visualizations.
References
JavaScript provides a powerful toolset for creating and manipulating SVG images. You can use plain JavaScript to create an SVG image, or use some libraries such as SVG.js, D3.js, Raphaël, and Snap.svg to create and manipulate SVG images in a more efficient and convenient way. These libraries provide a wide range of tools and methods for creating, styling, and animating SVG images, and can be useful for creating interactive and animated data visualizations.
SVG: Scalable Vector Graphics | MDN (mozilla.org)
SVG element reference - SVG: Scalable Vector Graphics | MDN (mozilla.org)