React实现翻页时钟的代码示例
本文介绍在React中实现翻页时钟的方法。通过CSS3 3D变换叠加数字上下部分,利用JS控制时分秒组件间的联动与状态更新,实现完整的翻页动画效果。
1. 布局、样式、翻页动画
翻页时钟将数字拆分为上下两部分,通过设置 position 使所有数字元素在同一位置叠加。动画逻辑为:当前显示时间的 up 部分向下翻转至屏幕垂直位置,此时下一个时间的 down 部分同时向下翻转,从而完成翻页效果。
HTML 结构如下所示:
<div class="container">
<ul class="flip">
<li>
<div class="up">
<div class="content">0</div>
</div>
<div class="down">
<div class="content">0</div>
</div>
</li>
<li>
<div class="up">
<div class="content">1</div>
</div>
<div class="down">
<div class="content">1</div>
</div>
</li>
</ul>
</div>CSS 样式
.container {
height: 90px;
}
.container .flip {
position: relative;
float: left;
width: 60px;
height: 100%;
margin: 0 5px;
}
.flip li {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
font-size: 80px;
text-align: center;
line-height: 90px;
font-weight: bold;
border-radius: 6px;
perspective: 200px;
transform-style: preserve-3d;
}
.flip li:first-child {
z-index: 2;
}
// 设置class为up和down的高度为父元素容器的一半高度
.flip li > div {
position: absolute;
left: 0;
height: 50%;
width: 100%;
overflow: hidden;
}
.flip .up {
/* 改变选中轴的位置 使翻转轴位于up、down部分的中间*/
transform-origin: 0 100%;
top: 0;
border-radius: 4px;
}
.flip .down {
/* 改变选中轴的位置 使翻转轴位于up、down部分的中间 */
transform-origin: 0 0;
bottom: 0;
border-radius: 4px;
}
.flip .content {
position: absolute;
width: 100%;
border-radius: 6px;
color: #ccc;
background-color: #333;
text-shadow: 0 1px 2px #000;
}
.flip .up .content {
top: 0;
}
.flip .down .content {
bottom: 0;
}
// 设置翻页折痕
.flip .up::after {
content: "";
position: absolute;
top: 43px;
left: 0;
width: 100%;
height: 4px;
background-color: rgba(0, 0, 0, 0.4);
}实现的3D效果如下:

2. 使用 JS 使动画持续翻页
完整的翻页时钟显示格式为 00:00:00,共涉及 6 个翻页部分。可将这些部分提取为独立组件。
1、准备数据
由于时、分、秒各部分的数字范围不同,需预先准备相关数据。

2、封装翻页组件
组件接收两个参数:当前翻页类型(时、分、秒)及当前类型的时间值。当 index 与当前类型时间相同时,当前元素的 class 设为 active,前一个元素的 class 设为 before;若当前元素为第一个,则最后一个元素的 class 设为 before。

3、各个翻页组件间的联动
需定义一个对象,用于处理翻页组件间的联动关系。

秒钟个位转完一周后,秒钟十位需进行一次翻页,以此类推直至时钟十位翻转。实现方式如下:

源码地址
https://stackblitz.com/edit/vitejs-vite-ehlf3y?file=src%2FTimeCard.tsx
到此这篇关于React实现翻页时钟的代码示例的文章就介绍到这了,更多相关React翻页时钟内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
React与Vue框架选型对比:基于JavaScript前端开发视角
2026-11-04 09:50:04
React中使用Chart.js绘制动态更新饼状图
2026-11-03 22:13:19
深入理解 React 虚拟 DOM 与 Diff 算法工作原理
2026-11-03 20:15:40
详解 dva Model 结构:state、reducers 与 effects 写法指南
2026-11-03 18:15:14
排查 UmiJS 常见构建报错与路由失效问题
2026-11-03 12:47:41







