本文介绍一种无需Canvas即可实现的动态时钟效果。通过HTML构建基础结构,利用CSS的transform属性对div元素进行rotate旋转,结合JavaScript定时器更新样式,实现时针、分针和秒针的精准走动。
纯CSS Transform与JS实现的无Canvas时钟
这里展示另一种时钟效果的实现方式。该方案完全摒弃了Canvas,仅依靠div、ul和li等基础HTML元素构建图形,既有趣又具备真实感。
哈哈~
虽然需要JavaScript来驱动指针走动,但代码量不大且逻辑简单。核心思路在于CSS中transform属性的应用,特别是rotate旋转功能。由于时钟本质是圆形结构,只需将旋转中心点设定为圆心,并让时针、分针等元素的底部与圆心重合,即可实现绕圆心旋转的效果。

代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>transform</title>
<style id="css">
#clock{
width: 200px;
height: 200px;
border: 2px solid #000;
border-radius: 50%;
margin: 100px auto 0;
position: relative;
}
#clock ul{
width: 200px;
height: 200px;
position: relative;
list-style: none;
padding:0;
margin: 0;
}
#clock ul li{
width: 2px;
height: 10px;
background: #000;
transform-origin: center 100px;
position: absolute;
top: 0;
left: 50%;
}
#clock ul li:nth-of-type(5n+1){
height: 20px;
}
#hour{
height: 40px;
width: 4px;
background: #00fefe;
position: absolute;
top: 60px;
left: 99px;
transform-origin:center bottom;
}
#min{
height: 60px;
width: 3px;
background: #001afe;
position: absolute;
top: 40px;
left: 99px;
transform-origin: center bottom;
transform: rotate(15deg);
}
#sec{
height: 70px;
width: 2px;
background: #000;
position: absolute;
top: 30px;
left: 99px;
transform-origin:center bottom;
}
#dot{
width: 10px;
height: 10px;
position: absolute;
left: 95px;
top: 95px;
background: #aaa;
border-radius: 50%;
}
</style>
</head>
<body>
<div id="clock">
<ul></ul>
<div id="hour"></div>
<div id="min"></div>
<div id="sec"></div>
<div id="dot"></div>
</div>
<script>
var oCss=document.getElementById("css");
var oClock=document.getElementById("clock");
var oUl=oClock.getElementsByTagName("ul")[0];
var oHour=document.getElementById("hour");
var oMin=document.getElementById("min");
var oSec=document.getElementById("sec");
var strLi="";
var strCss="";
for(var i=0;i<60;i++){
strLi+="<li></li>";
}
oUl.innerHTML=strLi;
for(var i=0;i<60;i++){
strCss+='#clock ul li:nth-of-type('+(i+1)+'){transform:rotate('+i*6+'deg);}';
}
oCss.innerHTML+=strCss;
time();
setInterval(time,1000);
function time(){
var date=new Date();
var h=date.getHours();
var m=date.getMinutes();
var s=date.getSeconds();
oHour.style.transform="rotate("+(h+m/60)*30+"deg)";
oMin.style.transform="rotate("+(m+s/60)*6+"deg)";
oSec.style.transform="rotate("+s*6+"deg)";
}
</script>
</body>
</html>
利用标签绘制图形时,定位是关键,它决定了形状元素在页面中的具体位置。内部CSS样式可以通过获取DOM元素的方式动态添加,利用innerHTML循环生成大量刻度以节省开发时间。此外,通过设置定时器,每秒执行一次更新函数,即可让时钟动起来。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。