JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Canvas :: Sample #1</title>
<script type="text/javascript" src="excanvas.js"></script>
</head>
<body>
<script type="text/javascript">
var indicatorClass = {
rotationIncrement : 10,
rotationRadius : 40,
rotationAngle : -105,
getRadianAngle : function (degreeValue) {
return degreeValue * Math.PI / 180;
},
initCanvas : function () {
var indicatorData = $ ('.indicator'),
pointerImage = indicatorData.find ('.pointer');
var canvasData = $ ('#canvas').get (0),
contextData = canvasData.getContext ("2d"),
rotationArrow = pointerImage.get (0);
setInterval(function () {
indicatorClass.rotationAngle += 10;
indicatorClass.rotationIncrement++;
indicatorClass.setTransform (contextData, indicatorData, rotationArrow);
}, 100);
},
setTransform : function (contextData, indicatorData, rotationArrow) {
var sin = Math.sin(indicatorClass.rotationIncrement * Math.PI / 6);
var cos = Math.cos(indicatorClass.rotationIncrement * Math.PI / 6);
contextData.clearRect (0, 0, contextData.canvas.width, contextData.canvas.height);
contextData.save ();
contextData.translate(indicatorData.width () / 2, indicatorData.height () / 2);
contextData.transform(cos, sin, -sin, cos, 0, 0);
contextData.drawImage(rotationArrow, -rotationArrow.width / 2, -rotationArrow.height / 2);
contextData.restore ();
},
setRotation : function (contextData, indicatorData, rotationArrow) {
contextData.clearRect (0, 0, contextData.canvas.width, contextData.canvas.height);
contextData.save ();
contextData.translate(indicatorData.width () / 2, indicatorData.height () / 2);
contextData.rotate(indicatorClass.getRadianAngle (indicatorClass.rotationAngle));
...