console
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
(function clock(){
var hour = document.getElementById("hour"),
min = document.getElementById("min"),
sec = document.getElementById("sec");
(function loop(){
requestAnimFrame(loop);
draw();
})();
function draw(){
var now = new Date(),
then = new Date(now.getFullYear(),now.getMonth(),now.getDate(),0,0,0),
diffInMil = (now.getTime() - then.getTime()),
h = (diffInMil/(1000*60*60)),
m = (h*60),
s = (m*60);
sec.style.webkitTransform = "rotate(" + (s * 6) + "deg)";
hour.style.webkitTransform = "rotate(" + (h * 30 + (h / 2)) + "deg)";
min.style.webkitTransform = "rotate(" + (m * 6) + "deg)";
}
})();
<div class="icon-large icon-clock">
<div class="clock">
<ol>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
<div id="hour"></div>
<div id="min"></div>
<div id="sec"></div>
</div>
</div>
@mixin centerer {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin has-child {
&:before, &:after {
content: "";
display: block;
position: absolute;
}
}
html, body {
height: 100%;
background: #ffd740;
position: relative;
}
.icon-large {
width: 220px;
height: 220px;
border-radius: 38px;
@include centerer;
}
.icon-clock {
overflow: hidden;
background: #000;
}
.clock{
width:192px;
height:192px;
border-radius:50%;
background:#f1f1f1 ;
@include centerer;
ol{
list-style-type:none;
width:100%;
height:100%;
position:relative;
margin:0;
padding:0;
li{
counter-increment: labelCounter;
position:absolute;
font-size:1.25em;
&:before {
font-family:'Helvetica';
content: counter(labelCounter) "";
}
&:nth-child(1){
right:55px;
top:20px;
}
&:nth-child(2){
right:25px;
top:50px;
}
&:nth-child(3){
right:12px;
top:85px;
}
&:nth-child(4){
right:25px;
top:125px;
}
&:nth-child(5){
right:55px;
top:150px;
}
&:nth-child(6){
right:90px;
top:160px;
}
&:nth-child(7){
right:125px;
top:150px;
}
&:nth-child(8){
right:155px;
top:125px;
}
&:nth-child(9){
right:165px;
top:85px;
}
&:nth-child(10){
right:150px;
top:50px;
}
&:nth-child(11){
right:120px;
top:20px;
}
&:nth-child(12){
right:85px;
top:10px;
}
}
}
}
@keyframes spin{
100%{
transform:rotate(360deg);
}
}
#hour{
width:14px;
height:14px;
border-radius:50%;
background:#303030 ;
position:absolute;
top:50%;
left:50%;
margin-top:-7px;
margin-left:-7px;
@include has-child;
&:before{
width:8px;
height:65px;
border-radius:4px;
background:#303030 ;
position:absolute;
bottom:2px;
left:50%;
transform:translate(-50%,0);
}
}
#min{
width:0;
height:0;
border-radius:50%;
background:#303030 ;
position:absolute;
top:50%;
left:50%;
@include has-child;
&:before{
width:6px;
height:85px;
border-radius:4px;
background:#303030 ;
position:absolute;
bottom:2px;
left:50%;
transform:translate(-50%,0);
}
}
#sec{
width:4px;
height:4px;
border-radius:50%;
background:#dd3e1c ;
border:2px solid #e13e1b ;
position:absolute;
top:50%;
left:50%;
margin-top:-4px;
margin-left:-4px;
@include has-child;
&:before{
width:2px;
height:105px;
border-radius:4px;
background:#e13e1b ;
position:absolute;
bottom:-12px;
left:50%;
transform:translate(-50%,0);
}
}