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));
     ...