JSFiddle - React, Tailwind, and code Playground

HTML

<div class="indicator">
   <img class="image" src="http://javascript.ru/forum/attachments/project/558d1288868268t-vrashhenie-s-vlozheniem-v-canvas-transform-usage_icon_electro-png" alt="" />
   <img class="pointer" src="http://javascript.ru/forum/attachments/project/557d1288868261-vrashhenie-s-vlozheniem-v-canvas-transform-usage_electro_pointer-png" alt="" />
   <canvas width="120" height="120" id="canvas"></canvas>
</div>

CSS

.indicator {
   width:120px;
   height:120px;
   border:1px solid #ccc;
   text-align:center;
   position:relative;
}
.indicator .pointer {
   visibility:hidden;
}
.indicator #canvas {
   z-index:10000;
   position:absolute;
   top:0;
   left:0;
   width:100%;
   height:100%;
}

JavaScript

var indicatorClass = {
   rotationIncrement : 10,
   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.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 / 1);
       
      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 / 1);
      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.drawImage(rotationArrow, -rotationArrow.width / 2, -rotationArrow.height / 2);
      contextData.restore ();
   }
}

window.onload = function () {
   indicatorClass.initCanvas ();
}