JSFiddle - React, Tailwind, and code Playground
HTML
<div class="chart"></div>
CSS
line {
display: block;
stroke: black;
}
JavaScript
var clockGroup, fields, formatHour, formatMinute, formatSecond, height, offSetX, offSetY, pi, render, scaleHours, scaleSecsMins, vis, width;
var radius = 80;
var tickLength = 10;
var fromClock = 9;
var toClock = 6;
var circleDegree = 360;
function degToRad(degrees) {
return degrees * Math.PI / 180;
}
function clockToRad(clock, direction) {
var unit = circleDegree / 12;
var degree = direction > 0 ? unit * clock : unit * clock - circleDegree;
return degToRad(degree);
}
function getCoordFromCircle(deg, cx, cy, r) {
var rad = degToRad(deg);
var x = cx + r * Math.cos(rad);
var y = cy + r * Math.sin(rad);
return [x, y];
}
function splitDegrees(num) {
var angle = circleDegree / num;
var degrees = [];
for (var ang = 0; ang < circleDegree; ang += angle) {
degrees.push(ang);
}
return degrees;
}
formatSecond = d3.time.format("%S");
formatMinute = d3.time.format("%M");
formatHour = d3.time.format("%H");
fields = function() {
var d, data, hour, minute, second;
d = new Date();
second = d.getSeconds();
minute = d.getMinutes();
hour = d.getHours() + minute / 60;
return data = [{
"unit": "seconds",
"text": formatSecond(d),
"numeric": second
}, {
"unit": "minutes",
"text": formatMinute(d),
"numeric": minute
}, {
"unit": "hours",
"text": formatHour(d),
"numeric": hour
}];
};
width = 400;
height = 200;
offSetX = 100;
offSetY = 100;
pi = Math.PI;
scaleSecsMins = d3.scale.linear()
.domain([0, 59 + 59 / 60])
.range([0, 2 * pi]);
scaleHours = d3.scale.linear()
.domain([0, 11 + 59 / 60])
.range([0, 2 * pi]);
vis = d3.selectAll(".chart")
.append("svg:svg")
.attr("width", width)
.attr("height", height);
clockGroup = vis.append("svg:g")
.attr("transform", "translate(" + offSetX + "," + offSetY + ")");
var arc = d3.svg.arc()
...