In this article, we are going to learn to create/develop a working analog clock using HTML, CSS and jQuery.
The basic login in this analog clock lies in the fact that a complete one round is equivalent to 360 degrees. The position of hour hand, minute hand and second hand are determined accordingly.
Full Source Code :
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
body{
background: #ddd;
}
section {
width: 80vmin;
height: 80vmin;
margin: auto;
background: #fff;
border: 3vmin solid #000;
border-radius: 50%;
margin-top: 3vmin;
box-shadow:
inset 40px 40px 90px rgba(0,0,0,.2),
inset 10px 10px 30px rgba(0,0,0,.5),
20px 20px 30px rgba(0,0,0,.4),
40px 40px 60px rgba(0,0,0,.4);
position: relative;
z-index: 1;
}
section:before {
content: '';
width: 95%;
height: 95%;
border-radius: 50%;
display: block;
background: transparent;
border: 2vmin solid white;
}
section:after {
content: '';
width: 105%;
height: 105%;
border-radius: 50%;
display: block;
background: transparent;
position: absolute;
top: -2.5%;
left: -2.5%;
box-shadow: -3px -3px 9px rgba(255,255,255,.8);
}
.label {
position: absolute;
top: 19vmin;
left: 46%;
font-size: 2.5vmin;
}
.hourhand,
.secondhand,
.minutehand {
width: 25vmin;
height: 2vmin;
background: #000;
position: absolute;
top: 40vmin;
left: calc(50% - 3.5vmin);
z-index: 2;
transform: rotate(-139deg);
transform-origin: 16%;
display: none;
}
.hourhand:after,
.secondhand:after,
.minutehand:after {
content: '';
background: #000;
width: 5vmin;
height: 5vmin;
border-radius: 50%;
z-index: 3;
position: absolute;
top: -1.5vmin;
left: 1.5vmin;
}
.hourhand {
border-top-right-radius: 20%;
border-bottom-right-radius: 20%;
box-shadow: -10px 0px 10px rgba(0,0,0,.4);
}
.minutehand {
width: 40vmin;
height: 1vmin;
top: 40.5vmin;
transform: rotate(-39deg);
transform-origin: 10%;
border-top-right-radius: 30%;
border-bottom-right-radius: 30%;
box-shadow: -10px 10px 10px rgba(0,0,0,.4);
}
.minutehand:before {
content: '';
width: 4.5vmin;
height: 4.5vmin;
border-radius: 50%;
z-index: 99;
position: absolute;
top: -1.7vmin;
left: 1.7vmin;
box-shadow: -2px -2px 7px rgba(255,255,255,.6);
}
.minutehand:after {
top: -2vmin;
}
.secondhand {
width: 35vmin;
height: .5vmin;
top: 40.75vmin;
transform: rotate(160deg);
transform-origin: 11.5%;
box-shadow: -10px -10px 10px rgba(0,0,0,.4);
}
.secondhand:after {
top: -2.25vmin;
}
.hour12,
.hour1,
.hour2,
.hour3,
.hour4,
.hour5 {
height: 1vmin;
width: 55vmin;
background: transparent;
border-left: 7vmin solid #000;
border-right: 7vmin solid #000;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
position: absolute;
}
.hour3 { transform: rotate(90deg) translate(0, 34vmin); }
.hour1 { transform: rotate(120deg) translate(17vmin, 30vmin); }
.hour2 { transform: rotate(150deg) translate(29vmin, 18vmin); }
.hour4 { transform: rotate(210deg) translate(30vmin, -17vmin); }
.hour5 { transform: rotate(240deg) translate(17vmin, -30vmin); }
</style>
<section>
<div class="label">ROLEX</div>
<div class="hourhand"></div>
<div class="secondhand"></div>
<div class="minutehand"></div>
<div class="hour12"></div>
<div class="hour1"></div>
<div class="hour2"></div>
<div class="hour3"></div>
<div class="hour4"></div>
<div class="hour5"></div>
</section>
<script type="text/javascript">
setInterval(function(){
setTime();
},1000);
setTimeout(function(){
$(".minutehand").slideDown();
$(".secondhand").slideDown();
$(".hourhand").slideDown();
},1100);
function setTime(){
var d = new Date();
var seconds = d.getSeconds();
var minutes = d.getMinutes();
var hours = d.getHours();
hour_degree = minutes/60*30;
second_degree = 270 + (seconds*6);
$(".secondhand").css('transform','rotate('+second_degree+'deg)');
minute_degree = 270 + (minutes*6);
$(".minutehand").css('transform','rotate('+minute_degree+'deg)');
$(".hourhand").css('transform','rotate('+hour_degree+'deg)');
}
</script>
Follow this video for complete guidance :
Design Reference : https://codepen.io/nilsynils/pen/EZzyVB
