A Clock
Built with blockbuilder.org
A Clock
Built with blockbuilder.org
| <!DOCTYPE html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
| <style> | |
| body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; font-family: 'Roboto', sans-serif;} | |
| svg { width: 100%; height: 100%; } | |
| #wrap{position: absolute; bottom: 10px; left: 446px;} | |
| </style> | |
| </head> | |
| <body> | |
| <div id="charts"></div> | |
| <div id="wrap"> | |
| <span id="h"></span> : | |
| <span id="m"></span> : | |
| <span id="s"></span> | |
| </div> | |
| </body> | |
| <script> | |
| var h, m, s | |
| var hx, hy, mx, my, sx, sy | |
| var margin = {top: 20, right: 10, bottom: 20, left: 10}; | |
| var width = 960 - margin.left - margin.right; | |
| var height = 500 - margin.top - margin.bottom; | |
| var svg = d3.select("#charts").append("svg") | |
| .attr("width", width + margin.left + margin.right) | |
| .attr("height", height + margin.top + margin.bottom) | |
| .append("g") | |
| .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); | |
| svg.append('circle') | |
| .attr('r', 200) | |
| .attr('cx', width/2) | |
| .attr('cy', height/2) | |
| .style('fill', 'pink') | |
| svg.append('line') | |
| .attr('class', 'h') | |
| .attr('x1', width/2) | |
| .attr('x2', hx) | |
| .attr('y1', height/2) | |
| .attr('y2', hy) | |
| .style('stroke', 'white') | |
| .style('stroke-width', 8) | |
| svg.append('line') | |
| .attr('class', 'm') | |
| .attr('x1', width/2) | |
| .attr('x2', mx) | |
| .attr('y1', height/2) | |
| .attr('y2', my) | |
| .style('stroke', 'white') | |
| .style('stroke-width', 5) | |
| svg.append('line') | |
| .attr('class', 's') | |
| .attr('x1', width/2) | |
| .attr('x2', sx) | |
| .attr('y1', height/2) | |
| .attr('y2', sy) | |
| .style('stroke', 'orange') | |
| .style('stroke-width', 2) | |
| svg.append('circle') | |
| .attr('r', 10) | |
| .attr('cx', width/2) | |
| .attr('cy', height/2) | |
| .style('fill', 'white') | |
| function tick() { | |
| var today = new Date() | |
| h = today.getHours() | |
| m = today.getMinutes() | |
| s = today.getSeconds() | |
| hx = Math.sin(Math.PI - h/24 * Math.PI * 2) * 120 | |
| hy = Math.cos(Math.PI - h/24 * Math.PI * 2) * 120 | |
| mx = Math.sin(Math.PI - m/60 * Math.PI * 2) * 180 | |
| my = Math.cos(Math.PI - m/60 * Math.PI * 2) * 180 | |
| sx = Math.sin(Math.PI - s/60 * Math.PI * 2) * 200 | |
| sy = Math.cos(Math.PI - s/60 * Math.PI * 2) * 200 | |
| d3.select('#h').html(h < 10 ? '0' + h : h) | |
| d3.select('#m').html(m < 10 ? '0' + m : m) | |
| d3.select('#s').html(s < 10 ? '0' + s : s) | |
| d3.select('.h') | |
| .attr('x2', hx + width / 2) | |
| .attr('y2', hy + height / 2) | |
| d3.select('.m') | |
| .attr('x2', mx + width / 2) | |
| .attr('y2', my + height / 2) | |
| d3.select('.s') | |
| .attr('x2', sx + width / 2) | |
| .attr('y2', sy + height / 2) | |
| } | |
| function loop(cb){ | |
| requestAnimationFrame(function(){ | |
| loop(cb) | |
| }) | |
| cb() | |
| } | |
| loop(tick) | |
| </script> |