旋转时钟

发表于:2019-08-19 20:46
css
热度:725
喜欢:2

实现原生的时钟

<style> #warp{ --scale-radius:300px; background:red; width:calc(var(--scale-radius) *2); height:calc(var(--scale-radius) *2); border-radius:100%; position:relative; margin:0 auto; } #warp *{ margin:0; padding:0; box-sizing:border-box; } /* 刻度 */ .scale{ --s-width:10px; position:absolute; top:0px; height:calc(var(--scale-radius) *2 ); border-top:var(--s-width) solid #000; border-bottom:var(--s-width) solid #000; } /* 每五分钟的刻度 */ .scale.f{ --f-width:5px; width:var(--f-width); left:calc(var(--scale-radius) - var(--f-width)/2) } /* 每分钟的刻度 */ .scale.o{ --o-width:2px; width:var(--o-width); left:calc(var(--scale-radius) - var(--o-width)/2); } /* 指针 */ .scales .pointer{ position:absolute; background-size:100% 100%; } .scales .pointer.second{ --sec-width:2px; --sec-height-rate:0.8; --sec-height:calc((var(--scale-radius) * 2 - var(--scale-radius)/20) * var(--sec-height-rate)); --sec-top:calc((var(--scale-radius) * 2 - var(--sec-height)) / 2 ); width:var(--sec-width); height:var(--sec-height); top:var(--sec-top); left:calc(var(--scale-radius) - var(--sec-width)/2); border-top:5px #000 solid; border-bottom:100px red solid; background-color:#fff; z-index:3; } .scales .pointer.minute{ --min-width:4px; --min-height-rate:0.6; --min-height:calc((var(--scale-radius) * 2 - var(--scale-radius)/20) * var(--min-height-rate) ); --min-top:calc((var(--scale-radius) * 2 - var(--min-height)) / 2 ); width:var(--min-width); height:var(--min-height); top:var(--min-top); left:calc(var(--scale-radius) - var(--min-width) /2); border-top:5px yellow solid; border-bottom:100px red solid; background-color:#fff; z-index:2; } .scales .pointer.hour{ --hour-width:8px; --hour-height-rate:0.4; --hour-height:calc((var(--scale-radius) * 2 - var(--scale-radius)/20) * var(--hour-height-rate) ); --hour-top:calc((var(--scale-radius) * 2 - var(--hour-height)) / 2 ); width:var(--hour-width); height:var(--hour-height); top:var(--hour-top); left:calc(var(--scale-radius) - var(--hour-width) /2); border-top:5px yellow solid; border-bottom:100px red solid; background-color:#fff; z-index:1; } </style>

注意事项

  1. 矩形的旋转中心是在左下角,调整宽度会向右偏移矩形宽度的一半,需要校正
<script> const warp = $('#warp') for(let i=0;i<30;i++){ let w = i%5===0?'f':'o' $scale = `
`; warp.find('.scales').append($scale) } setInterval(()=>{ let t = new Date(); let second = t.getSeconds()===0?60:t.getSeconds(); let min = t.getMinutes(); let hour = t.getHours() let secondRate = 6*second; let minRate = 6*min; let hourRate = 360/12*hour console.log(hourRate) // 0s 0deg // 15s 90deg // 30s 180deg // 60s 360deg $('.scales .second').css({'transform':`rotateZ(${secondRate}deg)`}) $('.scales .minute').css({'transform':`rotateZ(${minRate}deg)`}) $('.scales .hour').css({'transform':`rotateZ(${hourRate}deg)`}) },1000) </script>