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");
}