Rotating Circle Animation in HTML5
 
 
This article describes 2-D transformations, especially translation and rotation.
 
Step 1
 
The first step is to define the parameters of the circle. Keep in mind that the preceding circle is not one single arc drawn as a circle, but 10 sectors drawn around the center to make a circle. So each sector will subtend an angle of 36 degrees.
     - var centreX = 100; var centreY = 100;  
- var radius = 75;  
- var rotateAngle = 36 * Math.PI / 180;  
- var startAngle = 0 * Math.PI / 180;  
- var endAngle = 36 * Math.PI / 180;  
     
 
Step 2
 
We create an array of colors to fill each sector of a circle.
 
var colors = ["teal", "red", "green", "blue", "yellow", "violet", "orange", "grey", "navy blue", "purple"];
 
Step 3
 
Since 10 sectors make up the circle, we will draw them using a "for loop". Before drawing each sector, we will:
     - Rotate the canvas about the center of the circle.
- Assign a color for the sector from the array "colors".
     - function drawWheel() {  
- var canvas = document.getElementById("canvas");  
- if (canvas.getContext) {  
-    var ctx = canvas.getContext("2d");  
-     for (i = 0; i < 10; i++) {  
-           ctx.fillStyle = colours[i];  
-           ctx.translate(centreX, centreY);  
-           ctx.rotate(rotateAngle);  
-           ctx.translate(-centreX, -centreY);  
-           ctx.beginPath();  
-           ctx.moveTo(centreX, centreY);  
-           ctx.lineTo(centreX + radius, centreY);  
-           ctx.arc(centreX, centreY, radius, startAngle, endAngle, false);  
-           ctx.closePath();  
-           ctx.fill();  
-         }  
-      }  
-   }  
     
 
Step 4
 
To rotate the circle we first define a rotating angle, using the following:
 
var rotateAngle = 36 * Math.PI / 180; 
 
Step 5
 
Rotate the canvas about the centre of the circle.
     - ctx.translate(centreX,centreY);  
- ctx.rotate(rotateAngle);  
- ctx.translate(-centreX,-centreY);   
     
 
 
Step 6
 
Draw the circle again, with the rotated canvas.
 
drawWheel(); 
 
Step 7
 
A counter keeps track of the number of times the canvas is rotated. When the number of rotations desired is done, stop the animation using the clearInterval() method. 
     - counter++;  
- if (counter > rnd) {  
-    counter = 0;  
-    clearInterval(animFlag);  
- }  
     
 
 
Step 8
 
Draw the "Rotate" button. Use the addEventListener() method to detect a mouse click. If the mouse is clicked inside the "Rotate" button, then call the rotateWheel() function. 
     - function mouseClick(event) {  
-     var x = event.clientX;  
-     var y = event.clientY;  
-     var rnd = Math.ceil(Math.random() * 100);  
-     if ((x > 200) && (x < 275) && (y > 100) && (y < 120))  
-          animFlag = setInterval(function () { rotateWheel(rnd) }, 25);  
-   }  
- window.addEventListener("click", mouseClick, false);  
     
 
Example
     - <!DOCTYPE html>  
-    
- <html lang="en" xmlns="http://www.w3.org/1999/xhtml">  
- <head>  
-     <meta content="text/html; charset=ISO-8859-1"  
-         http-equiv="content-type">  
-     <script type="application/javascript">  
-         var centreX = 100; var centreY = 100;  
-         var radius = 75;  
-         var rotateAngle = 36 * Math.PI / 180;  
-         var startAngle = 0 * Math.PI / 180;  
-         var endAngle = 36 * Math.PI / 180;  
-         var counter = 0;  
-         var animFlag;  
-         var colours = ["teal", "red", "green", "blue", "yellow", "violet", "orange", "grey", "navy blue", "purple"];  
-    
-         function init() {  
-             var canvas = document.getElementById("canvas");  
-             if (canvas.getContext) {  
-                 var ctx = canvas.getContext("2d");  
-                 ctx.lineWidth = 3.0;  
-                 ctx.fillStyle = "orange";  
-                 ctx.fillRect(200, 100, 75, 20);  
-                 ctx.fillStyle = "black";  
-                 ctx.font = "15px verdana";  
-                 ctx.fillText("Rotate", 215, 114);  
-                 drawWheel();  
-             }  
-         }  
-    
-         function drawWheel() {  
-             var canvas = document.getElementById("canvas");  
-             if (canvas.getContext) {  
-                 var ctx = canvas.getContext("2d");  
-                 for (i = 0; i < 10; i++) {  
-                     ctx.fillStyle = colours[i];  
-                     ctx.translate(centreX, centreY);  
-                     ctx.rotate(rotateAngle);  
-                     ctx.translate(-centreX, -centreY);  
-                     ctx.beginPath();  
-                     ctx.moveTo(centreX, centreY);  
-                     ctx.lineTo(centreX + radius, centreY);  
-                     ctx.arc(centreX, centreY, radius, startAngle, endAngle, false);  
-                     ctx.closePath();  
-                     ctx.fill();  
-                 }  
-             }  
-         }  
-    
-         function rotateWheel(rnd) {  
-             var canvas = document.getElementById("canvas");  
-             if (canvas.getContext) {  
-                 var ctx = canvas.getContext("2d");  
-                 ctx.translate(centreX, centreY);  
-                 ctx.rotate(rotateAngle);  
-                 ctx.translate(-centreX, -centreY);  
-                 drawWheel();  
-                 counter++;  
-                 if (counter > rnd) {  
-                     counter = 0;  
-                     clearInterval(animFlag);  
-                 }  
-             }  
-         }  
-    
-         function mouseClick(event) {  
-             var x = event.clientX;  
-             var y = event.clientY;  
-             var rnd = Math.ceil(Math.random() * 100);  
-             if ((x > 200) && (x < 275) && (y > 100) && (y < 120))  
-                 animFlag = setInterval(function () { rotateWheel(rnd) }, 25);  
-         }  
-         window.addEventListener("click", mouseClick, false);  
-    
-     </script>  
-     <title>Animation - Moving Banner</title>  
- </head>  
- <body onload="init();">  
-     <canvas id="canvas" width="600" height="500"></canvas>  
-     <br>  
- </body>  
- </html>  
     
 
 
Output