19-theme-colock

 

 

 

 

html

复制代码
<!DOCTYPE html>
<html lang="en">
<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">
    <link rel="stylesheet" href="./style.css">
    <title>Document</title>
</head>
<body>
    
    <button class="toggle">Dark mode</button>

    <div class="clock-container">
        <div class="clock">
            <div class="needle hour"></div>
            <div class="needle minute"></div>
            <div class="needle second"></div>
            <div class="center-point"></div>
        </div>

        <div class="time"></div>
        <div class="date"></div>

    </div>

    <script src="script.js"></script>
</body>
</html>
复制代码

 

 

css

复制代码
@import url('https://fonts.googleapis.com/css?family=Heebo:300&display=swap');

* {
  box-sizing: border-box;
}

:root{
    --primary-color:#000;
    --secondary-color:#fff;
}

html{
    transition: all 0.5s ease-in;
}

html.dark{
    --primary-color:#fff;
    --secondary-color:#333;
}

html.dark{
    background-color: #111;
    color: var(--primary-color);
}

body{
    font-family: 'Heebo',sans-serif;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
}

.toggle{
    cursor: pointer;
    background-color: var(--primary-color);
    color: var(--secondary-color);
    border: 0;
    border-radius: 4px;
    padding: 8px 12px;
    position: absolute;
    top: 100px;
}


.toggle:focus{
    outline: none;
}

.clock-container{
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: center;
}


.clock{
    position: relative;
    width: 200px;
    height: 200px;
}

.needle{
    background-color: var(--primary-color);
    position: absolute;
    top: 50%;
    left: 50%;
    height: 65px;
    width: 3px;
    transform-origin: bottom center;
    transition: all 0.5s ease-in;
}


.needle.hour{
    transform: translate(-50%,-100%) rotate(0deg);
}

.needle.minute{
    transform: translate(-50%,-100%) rotate(0deg);
    height: 100px;
}

.needle.minute{
    transform: translate(-50%,-100%) rotate(0deg);
    height: 100px;
}

.needle.second{
    transform: translate(-50%,-100%) rotate(0deg);
    height: 100px;
    background-color: #e74c3c;
}

.center-point{
    transform: translate(-50%,-100%) rotate(0deg);
    height: 100px;
    background-color: #e74c3c;
}

.center-point{
    background-color: #e74c3c;
    width: 10px;
    height: 10px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    border-radius: 50%;
}

.center-point::after{
    content: '';
    background-color: var(--primary-color);
    width: 5px;
    height: 5px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    border-radius: 50%;
}

.date{
    color: #aaa;
    font-size: 14px;
    letter-spacing: 0.3px;
    text-transform: uppercase;
}

.date .circle{
    background-color: var(--primary-color);
    color: var(--secondary-color);
    border-radius: 50%;
    height: 18px;
    width: 18px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 18px;
    transition: all 0.5s ease-in;
    font-size: 12px;
}
复制代码

 

 

javaScript

复制代码
const hourEl = document.querySelector('.hour')
const minuteEl = document.querySelector('.minute')
const secondEl = document.querySelector('.second')
const timeEl = document.querySelector('.time')
const dateEl = document.querySelector('.date')
const toggle = document.querySelector('.toggle')

const days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
const months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

toggle.addEventListener('click',(e)=>{
    const html = document.querySelector('html')
    if(html.classList.contains('dark')){
        html.classList.remove('dark')
        e.target.innerHTML="Dark mode"
    }else{
        html.classList.add('dark')
        e.target.innerHTML='Light mode'
    }
})


function setTime(){
    const time = new Date();
    const month =time.getMonth();
    const day = time.getDay();
    const date = time.getDate();
    const hours =time.getHours();
    const hoursForClock = hours >= 13 ? hours % 12 : hours;
    
    const minutes = time.getMinutes();
    const seconds = time.getSeconds()
    const ampm = hours >= 12 ? 'PM' : 'AM'

    hourEl.style.transform = `translate(-50%,-100%) rotate(${scale(hoursForClock,0,12,0,360)}deg)`
    minuteEl.style.transform=`translate(-50%,-100%) rotate(${scale(minutes,0,60,0,360)}deg)`
    secondEl.style.transform = `translate(-50%,-100%) rotate(${scale(seconds,0,60,0,360)}deg)`

    timeEl.innerHTML=`${hoursForClock}:${minutes <10 ? `0${minutes}` : minutes } ${ampm}`
    dateEl.innerHTML = `${days[day]}, ${months[month]} <span class="circle">${date}</span>`
}

const scale =(num,in_min,in_max,out_min,out_max)=>{
    return (num-in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

setTime()

setInterval(setTime,1000)
复制代码

 

posted @   漫漫长路</>  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示