JSFiddle - React, Tailwind, and code Playground
by Mert Ener
HTML
<div id="viewport">
<div class="circle" id="circle1"></div>
<div class="circle" id="circle2"></div>
<div class="circle" id="circle3"></div>
</div>
<select id="cog">
<option value="cog1">1</option>
<option value="cog2">2</option>
<option value="cog3">3</option>
</select>
<select id="rev">
<option value="2">2</option>
<option value="4">4</option>
<option value="6">6</option>
<option value="8">8</option>
</select>
<select id="dir">
<option value="1">CW</option>
<option value="-1">CCW</option>
</select>
<button id="start" onClick="start()">Start</button>
<button id="stop" onClick="stop()">Stop</button>
CSS
.circle {
width: 144px;
height: 144px;
display:inline-block;
transform: rotate(0deg);
margin-left:-18px;
background-image: url("http://www.script-tutorials.com/demos/247/images/g4.png");
background-repeat: no-repeat
}
#viewport {
margin-left:20px;
white-space:nowrap
}
#circle2 {
transform: rotate(10deg);
}
JavaScript
function cog(e) {
var spd = 2,
dir = 1;
this.speed = function (s) {
spd = s;
}
this.direction = function (d) {
dir = d;
}
this.run = function (r) {
if (r == "start") {
this.rotate = setInterval(function () {
values = window.getComputedStyle(e, null).getPropertyValue("transform").split('(')[1].split(')')[0].split(',');
e.style.transform = "rotate(" + (Math.round(Math.atan2(values[1], values[0]) * (180 / Math.PI)) + (spd * dir)) + "deg)";
}, 42);
} else {
clearInterval(this.rotate);
}
}
}
var cog1 = new cog(document.getElementById("circle1"));
var cog2 = new cog(document.getElementById("circle2"));
var cog3 = new cog(document.getElementById("circle3"));
function start() {
el = eval(document.getElementById("cog").value);
el.speed(document.getElementById("rev").value);
el.direction(document.getElementById("dir").value);
el.run("start");
}
function stop() {
el.run("stop");
}