HTML5+CSS3+JS小实例:创意罗盘时钟

动态效果:

HTML:

<div class="clock">
    <div class="second-box"></div>
    <div class="minute-box"></div>
    <div class="hour-box"></div>
    <div class="day-box"></div>
    <div class="month-box"></div>
    <div class="year-box"></div>
</div>

 CSS:

/* 引入LED字体 */
@font-face {
    font-family: UnidreamLED;
    src: url('UnidreamLED.ttf');
}

*{
    margin: 0;
    padding: 0;
}
body{
    width: 100%;
    height: 100%;
}
.clock{
    width: 100%;
    height: 100%;
    background-color: #141929;
    position: absolute;
    display: flex;
    justify-content: center;
    align-items: center;
    color: #cad6dd;
    overflow: hidden;
    font-family: UnidreamLED;
}
/* 当前时间样式 */
.now-date{
    background-image: -webkit-linear-gradient(bottom,yellow,red);
    background-size: 100% 20px;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}
.year-box{
    width: 10vh;
    height: 10vh;
    position: absolute;
    display: flex;
    font-size: 20px;
    justify-content: center;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
    background-image: -webkit-linear-gradient(bottom,yellow,red);
    background-size: 100% 20px;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}
.month-box{
    width: 25vh;
    height: 25vh;
    position: absolute;
    display: flex;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
}
.day-box{
    width: 40vh;
    height: 40vh;
    position: absolute;
    display: flex;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
}
.hour-box{
    width: 55vh;
    height: 55vh;
    position: absolute;
    display: flex;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
}
.minute-box{
    width: 70vh;
    height: 70vh;
    position: absolute;
    display: flex;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
}
.second-box{
    width: 85vh;
    height: 85vh;
    position: absolute;
    display: flex;
    align-items: center;
    border-radius: 50%;
    transition: 1s;
}

JS:

let second=``;
for(let i=0;i<60;i++){
    let div=`<div id="second${i+1}" style="font-size:20px;width:100%;text-align:right;position:absolute;display:inline-block;transform:rotate(${(i-1)*-6}deg);">${i+1} 秒</div>`;
    second=second+div;
}
document.querySelector('.second-box').innerHTML=second;

let minute=``;
for(let i=0;i<60;i++){
    let div=`<div id="minute${i+1}" style="font-size:20px;width:100%;text-align:right;position:absolute;display:inline-block;transform:rotate(${i*-6}deg);">${i+1} 分</div>`;
    minute=minute+div;
}
document.querySelector('.minute-box').innerHTML=minute;

let hour=``;
for(let i=0;i<24;i++){
    let div=`<div id="hour${i+1}" style="font-size:20px;width:100%;text-align:right;position:absolute;display:inline-block;transform:rotate(${i*-15}deg);">${i+1} 时</div>`;
    hour=hour+div;
}
document.querySelector('.hour-box').innerHTML=hour;

let day=``;
// 每个月的天数
let _days=[31,28,31,30,31,30,31,31,30,31,30,31];
let _now=new Date();
let _year=_now.getFullYear();
let _month=_now.getMonth();
// 判断闰年的天数 二月为29天
if(_year%4===0 && (_year%100!==0 || _year%400===0)){
    _days[1]=29;
}
// 计算平均角度
let _deg=360/_days[_month];
for(let i=0;i<_days[_month];i++){
    let div=`<div id="day${i+1}" style="font-size:20px;width:100%;text-align:right;position:absolute;display:inline-block;transform:rotate(${i*-1*_deg}deg);">${i+1} 日</div>`;
    day=day+div;
}
document.querySelector('.day-box').innerHTML=day;

let month=``;
for(let i=0;i<12;i++){
    let div=`<div id="month${i+1}" style="font-size:20px;width:100%;text-align:right;position:absolute;display:inline-block;transform:rotate(${i*-30}deg);">${i+1} 月</div>`;
    month=month+div;
}
document.querySelector('.month-box').innerHTML=month;

let second360=0;
let minute360=0;
let hour360=0;
let day360=0;
let month360=0;

let oldsecond=0;
let oldminute=0;
let oldhour=0;
let oldday=0;
let oldmonth=0;

function transformBox(){
    let nowDate=new Date();
    let second=nowDate.getSeconds();
    let minute=nowDate.getMinutes();
    let hour=nowDate.getHours();
    let day=nowDate.getDate();
    let month=nowDate.getMonth();
    let year=nowDate.getFullYear();
    if(second===0 && oldsecond!==second){
        second360=second360+1;
    }
    if(minute===0 && oldminute!==minute){
        minute360=minute360+1;
    }
    if(hour===0 && oldhour!==hour){
        hour360=hour360+1;
    }
    if(day===0 && oldday!==day){
        day360=day360+1;
    }
    if(month===0 && oldmonth!==month){
        month360=month360+1;
    }
    document.querySelector('.second-box').style.transform=`rotate(${second360*360+(second-1)*6}deg)`;
    document.querySelector('.minute-box').style.transform=`rotate(${minute360*360+(minute-1)*6}deg)`;
    document.querySelector('.hour-box').style.transform=`rotate(${hour360*360+(hour-1)*15}deg)`;
    document.querySelector('.day-box').style.transform=`rotate(${day360*360+(day-1)*_deg}deg)`;
    document.querySelector('.month-box').style.transform=`rotate(${month360*360+month*30}deg)`;
    document.querySelector('.year-box').innerHTML=year+' 年';
    let nowDates=document.querySelectorAll('.now-date');
    nowDates.forEach((ele)=>{
        ele.classList='';
    });
    document.querySelector(`#second${second+1}`).classList='now-date';
    document.querySelector(`#minute${minute===0?'60':minute}`).classList='now-date';
    document.querySelector(`#hour${hour===0?'24':hour}`).classList='now-date';
    document.querySelector(`#day${day}`).classList='now-date';
    document.querySelector(`#month${month+1}`).classList='now-date';

    oldsecond=second;
    oldminute=minute;
    oldhour=hour;
    oldday=day;
    oldmonth=month;
}
transformBox();
setInterval(()=>{
    transformBox();
},1000);

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀南.

你的鼓励将是我最最最最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值