电子时钟(基于CSS3动画transform)

这篇博客展示了如何使用CSS实现一个具有时、分、秒指针的时钟动画。通过创建不同类别的div元素,结合伪类和绝对定位,设置渐变背景和旋转变换,实现了时钟的外观和动态效果。时钟包括了小时、分钟和秒钟的指针,且秒钟在鼠标悬停时会完整旋转一圈,提供了一个交互式的体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果预览:
transform_09

实现思路:使用一个盒子.clock作为时钟地盘,并为当前盒子添加伪类使其在当前盒子内部进行显示,并遮住当前盒子内部部分,再利用.line盒子进行刻度绘制,最后还需要一个盒子遮住里面多余的线条,最后再绘制时分秒。

实现代码:
html

 <div class="clock">
        <div class="line">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
        <div class="hour"></div>
        <div class="minute"></div>
        <div class="second"></div>
    </div>

css

body {
    width: 100vw;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background: #2C3A47 ;
}

/*最外层的时钟边缘部分*/
.clock {
    width: 400px;
    height: 400px;
    background: linear-gradient(to right, #EAB543,#F8EFBA,#FEA47F,#F97F51);
    border-radius: 50%;
    position: relative;
    z-index: -2;
}

/*时钟罩住部分*/
.clock::after {
    content: "";
    width: 80%;
    height: 80%;
    background: #2C3A47;
    border-radius: 50%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    z-index: -1;
}

.line {
    position: absolute;
    width: 70%;
    height: 70%;
    background: #2C3A47;
    border-radius: 50%;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);

}

/*给每一根线条设置高度*/
.line div{
    width: 100%;
    height: 5px;
    background: #fff;
    position: absolute;
    top: 50%;
    left: 0%;
    transform-origin: 50% 50%;
}

/*旋转每一根线条*/
.line>div:nth-child(1) {
    transform: rotate(0deg);
}

.line>div:nth-child(2) {
    transform: rotate(30deg);
}

.line>div:nth-child(3) {
    transform: rotate(60deg);
}

.line>div:nth-child(4) {
    transform: rotate(90deg);
}

.line>div:nth-child(5) {
    transform: rotate(120deg);
}

.line>div:nth-child(6) {
    transform: rotate(150deg);
}

/*遮住中间线条*/
.line::before {
    content: "";
    width: 90%;
    height: 90%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    background: #2C3A47;
    z-index: 2;
    border-radius: 50%;
}

/*设置时钟中心旋转点*/
.line::after {
    content: "";
    width: 5%;
    height: 5%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    background: #D980FA;
    z-index: 2;
    border-radius: 50%;
}

/*设置时  注意 该元素父元素为clock*/
.clock .hour {
    width: 15%;
    height: 2%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform-origin: left bottom;
    transform: translate(-5%,-50%);
    background: #D980FA;
    z-index: 2;
}

/*设置分  注意 该元素父元素为clock*/
.clock .minute {
    width: 23%;
    height: 2%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform-origin: left bottom;
    transform: translate(0%,-50%) rotate(-60deg);
    background: #D980FA;
    z-index: 2;
}

/*设置秒  注意 该元素父元素为clock*/
.clock .second {
    width: 30%;
    height: 1%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform-origin: left bottom;
    transform: translate(0%,0%) rotate(-60deg);
    transition: 60s steps(60,start);
    background: #D6A2E8;
    z-index: 10;
}

/*当鼠标悬浮时 秒钟旋转*/
body:hover .second {
    transform: translate(0%,-50%) rotate(360deg);
}
flash版时钟 详细操作步骤 素材全 1.新建Flash文档,设置舞台尺寸为:“354×499”。将素材文件“钟.jpg”、“钟摆.jpg”导入到【库】面板中。 2.将“图层1”更名为“背景”;将【库】面板中的“钟.jpg”拖放到舞台中;设置坐标点为(0,0)3.新建“钟摆动画”影片剪辑元件,将【库】面板中的“钟摆.jpg”拖放到舞台上,设置坐标点为(-31.5,0);将图形的变形点移至上边中点,分别在第12、24、36、48帧插入关键帧;选择第12帧,旋转15°;选择第36帧,旋转-15°;分别在1~12、12~24、24~36、36~48帧之间创建补间动画。 4.增加“背景2”图层,将【库】面板中的“钟摆动画”元件拖放到舞台,调整到合适的位置;在【时间轴】面板中将“背景2”图层移动到“背景”图层的下方。 5.选择“背景”图层,执行【修改】→【分离】菜单命令;使用【橡皮擦工具】将钟面下方的背景擦除,以便使“钟摆”显示出来。 6.在“背景”图层上方增加一个“文本”图层,使用【文本工具】在钟的盘面上创建7个分别用于显示“年”、“月”、“日”、“时”、“分”、“秒”、“星期”的动态文本,变量名分别设置为“year”、“month”、“date”、“hrs”、“min”、“sec”、“weekday”;分别在显示时与分、分与秒的动态文本框之间,插入静态文本“:”,在显示月、日的动态文本框后插入静态文本“月”、“日”,在显示星期的动态文本框前插入静态文本“星期”;对各动态文本框、静态文本设置合适的字体、字体大小、颜色等。 7.在所有图层的上方添加一个“动作”图层,选择第1帧,打开“动作”面板,输入如下代码: dt = new Date(); hrs = dt.getHours(); *************************************} 8.测试影片,此时发现所显示时间是“非即时”的——时间未更新。选择所有图层的第1帧插入帧。 9.测试影片;保存文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值