优雅漂亮的圆形时钟

2022-05-12  本文已影响0人  ohityes

这是一款使用 CSS 制作的优雅漂亮的圆形时钟,时钟清爽简洁,看起来非常舒服。

优雅漂亮的圆形时钟
查看效果:优雅漂亮的圆形时钟演示

制作过程

1、HTML

HTML 代码比较简单,应为只需要一个表盘和三根针。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>优雅漂亮的圆形时钟演示_dowebok</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <div class="clock">
        <div class="outer-clock-face">
            <div class="marking marking-one"></div>
            <div class="marking marking-two"></div>
            <div class="marking marking-three"></div>
            <div class="marking marking-four"></div>
        </div>

        <div class="inner-clock-face">
            <div class="hand hour-hand"></div>
            <div class="hand min-hand"></div>
            <div class="hand second-hand"></div>
        </div>
    </div>

    <script src="script-ym.js"></script>
</body>
</html>

2、CSS

CSS 代码稍微多一点,主要是美化表盘。

html {
    background: #d8dcd6;
    text-align: center;
    font-size: 10px;
}
body {
    margin: 0;
    font-size: 2rem;
    display: flex;
    flex: 1;
    min-height: 100vh;
    align-items: center;
}
.clock {
    width: 30rem;
    height: 30rem;
    position: relative;
    padding: 2rem;
    border: 18px solid #d3d7d0;
    box-shadow: 5px -5px 5px 0px rgba(242, 243, 242, 0.5), -5px 8px 8px 0px rgba(177, 185, 173, 0.5),
        inset -3.5px 5.5px 6px 0px rgba(177, 185, 173, 0.5),
        inset 3px -3px 1px 0px rgba(190, 197, 186, 0.15);
    border-radius: 50%;
    margin: 50px auto;
}
.outer-clock-face {
    position: relative;
    background: #d8dcd6;
    overflow: hidden;
    width: 100%;
    height: 100%;
    border-radius: 100%;
}
.outer-clock-face::after {
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    transform: rotate(90deg);
}
.outer-clock-face::after,
.outer-clock-face::before,
.outer-clock-face .marking {
    content: '';
    position: absolute;
    width: 5px;
    height: 100%;
    background: #84c2b3;
    z-index: 0;
    left: 49%;
}
.outer-clock-face .marking {
    background: #9bc5bb;
    width: 3px;
}
.outer-clock-face .marking.marking-one {
    -webkit-transform: rotate(30deg);
    -moz-transform: rotate(30deg);
    transform: rotate(30deg);
}
.outer-clock-face .marking.marking-two {
    -webkit-transform: rotate(60deg);
    -moz-transform: rotate(60deg);
    transform: rotate(60deg);
}
.outer-clock-face .marking.marking-three {
    -webkit-transform: rotate(120deg);
    -moz-transform: rotate(120deg);
    transform: rotate(120deg);
}
.outer-clock-face .marking.marking-four {
    -webkit-transform: rotate(150deg);
    -moz-transform: rotate(150deg);
    transform: rotate(150deg);
}
.inner-clock-face {
    position: absolute;
    top: 10%;
    left: 10%;
    width: 80%;
    height: 80%;
    background: #d8dcd6;
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    border-radius: 100%;
    z-index: 1;
}
.inner-clock-face::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 16px;
    height: 16px;
    border-radius: 18px;
    margin-left: -9px;
    margin-top: -6px;
    background: #e38c63;
    z-index: 11;
}
.hand {
    width: 50%;
    right: 50%;
    height: 6px;
    background: #e38c63;
    position: absolute;
    top: 50%;
    border-radius: 6px;
    transform-origin: 100%;
    transform: rotate(90deg);
    transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
}
.hand.hour-hand {
    width: 30%;
    z-index: 3;
}
.hand.min-hand {
    height: 3px;
    z-index: 10;
    width: 45%;
}
.hand.second-hand {
    background: #767b78;
    width: 45%;
    height: 2px;
    z-index: 1;
}

3、Javascript

JS 代码也比较简单,只需获取当前的时间并设置一个定时器。

const secondHand = document.querySelector('.second-hand')
const minsHand = 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 mins = now.getMinutes()
    const minsDegrees = (mins / 60) * 360 + (seconds / 60) * 6 + 90
    minsHand.style.transform = `rotate(${minsDegrees}deg)`

    const hour = now.getHours()
    const hourDegrees = (hour / 12) * 360 + (mins / 60) * 30 + 90
    hourHand.style.transform = `rotate(${hourDegrees}deg)`
}

setInterval(setDate, 1000)

setDate()

到这里就制作完了,如需下载代码,请前往:优雅漂亮的圆形时钟

上一篇下一篇

猜你喜欢

热点阅读