Часы №1
- 5,29 КБ
- CSS, HTML, JS
- Часы
- аналоговые
- Лицензия MIT
<div class="clock">
<div class="middle"></div>
<div class="clock-face">
<div class="dots">
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
</div>
<div class="hand hour-hand"></div>
<div class="hand min-hand"></div>
<div class="hand second-hand"></div>
</div>
</div>
.clock {
position: relative;
width: 30rem;
height: 30rem;
margin: 3.125rem auto;
padding: 2rem;
border: 0.625rem solid #f5f5f5;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
}
.clock .middle {
position: absolute;
top: 50%;
left: 50%;
width: 3rem;
height: 3rem;
background-color: #f5f5f5;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
-webkit-box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
-moz-box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
box-shadow: 0 0 1.25rem rgba(51, 51, 51, 0.4);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
z-index: 9;
}
.clock .clock-face {
position: relative;
width: 100%;
height: 100%;
-webkit-transform: translateY(-3px);
-moz-transform: translateY(-3px);
-o-transform: translateY(-3px);
transform: translateY(-3px);
/* учитывать высоту стрелок часов */
}
.clock .clock-face .dots {
position: absolute;
content: "";
top: 0;
left: 0;
width: 100%;
height: 100%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
}
.clock .clock-face .dots .dot {
position: absolute;
top: -webkit-calc(50% - 0.1875rem);
top: -moz-calc(50% - 0.1875rem);
top: calc(50% - 0.1875rem);
width: 100%;
height: 0.625rem;
}
.clock .clock-face .dots .dot:before,
.clock .clock-face .dots .dot:after {
position: absolute;
content: "";
width: 0.625rem;
height: 0.625rem;
background-color: #f5f5f5;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
}
.clock .clock-face .dots .dot:before {
left: 0;
}
.clock .clock-face .dots .dot:after {
right: 0;
}
.clock .clock-face .dots .dot:nth-of-type(1) {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
.clock .clock-face .dots .dot:nth-of-type(2) {
-webkit-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-o-transform: rotate(30deg);
transform: rotate(30deg);
}
.clock .clock-face .dots .dot:nth-of-type(3) {
-webkit-transform: rotate(60deg);
-moz-transform: rotate(60deg);
-o-transform: rotate(60deg);
transform: rotate(60deg);
}
.clock .clock-face .dots .dot:nth-of-type(4) {
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
}
.clock .clock-face .dots .dot:nth-of-type(5) {
-webkit-transform: rotate(120deg);
-moz-transform: rotate(120deg);
-o-transform: rotate(120deg);
transform: rotate(120deg);
}
.clock .clock-face .dots .dot:nth-of-type(6) {
-webkit-transform: rotate(150deg);
-moz-transform: rotate(150deg);
-o-transform: rotate(150deg);
transform: rotate(150deg);
}
.clock .clock-face .hand {
position: absolute;
top: 50%;
width: 50%;
height: 0.375rem;
background: #333;
-webkit-border-radius: 6.1875rem;
-moz-border-radius: 6.1875rem;
border-radius: 6.1875rem;
-webkit-transform-origin: 100%;
-moz-transform-origin: 100%;
-o-transform-origin: 100%;
transform-origin: 100%;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transition: all 0.05s;
-o-transition: all 0.05s;
-moz-transition: all 0.05s;
transition: all 0.05s;
-webkit-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
-moz-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
-o-transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
}
.clock .clock-face .hand.second-hand {
background: #e74c3c;
}
.clock .clock-face .hand.hour-hand {
left: 10%;
width: 40%;
}
const secondHand = document.querySelector('.second-hand');
const minuteHand = document.querySelector('.min-hand');
const hourHand = document.querySelector('.hour-hand');
function setDate() {
const now = new Date();
const seconds = now.getSeconds();
const secondsDegrees = ((seconds / 60) * 360) + 90;
secondHand.style.transform = `rotate(${secondsDegrees}deg)`;
const minutes = now.getMinutes();
const minutesDegrees = ((minutes / 60) * 360) + 90;
minuteHand.style.transform = `rotate(${minutesDegrees}deg)`;
const hours = now.getHours();
const hoursDegrees = ((hours / 12) * 360) + 90;
hourHand.style.transform = `rotate(${hoursDegrees}deg)`;
}
setInterval(setDate,1000);
Давайте разберём код, который создаёт на веб-странице аналоговые часы. Это увлекательное сочетание HTML, CSS и JavaScript, где каждый язык вносит свой вклад в создание живых часов на вашем экране.
Начнём с HTML. Здесь задаётся структура часов: элементы для циферблата, точек, обозначающих часы, и стрелок для секунд, минут и часов. Это как бы каркас наших часов, где каждая деталь находится на своём месте.
Переходим к CSS. Именно здесь наши часы обретают свой внешний вид. Мы стилизуем их, чтобы они выглядели как настоящие аналоговые часы, с круглым циферблатом и стрелками. CSS отвечает за точное позиционирование каждого элемента, чтобы стрелки могли плавно перемещаться, показывая время. Стилизация также делает часы привлекательными, с подходящими цветами и размерами.
Наконец, JavaScript вдыхает в часы жизнь. Скрипт определяет текущее время и двигает стрелки часов в соответствии с реальным временем — секундами, минутами и часами. Это как сердцебиение наших часов, обеспечивающее их работу в унисон с временем. Скрипт непрерывно обновляет время, благодаря чему наши часы всегда идут точно.
Таким образом, этот кусок кода является идеальным примером того, как HTML, CSS и JavaScript могут совместно создать не только функциональный, но и стильный объект — аналоговые часы, которые не только показывают время, но и делают это с элегантностью.