今天,我把我在 react 中开发动画倒计时的步骤分享给大家。
使用到技术
- vite
- @react-spring/web
- date-fns
- styled-components
如何实现
由于我们想“创建一个倒计时,用来呈现从未来某个日期开始的剩余时间”,主要步骤:
- 创建一个抽象的
<Box/>
组件,该组件只负责渲染内部的标签,并在每次标签更改时为其自身设置动画。在这个 demo 中,我们可以找到 4 个<Box/>
。 - 创建
<Countdown/>
组件,用来负责渲染 4 个<Box/>
组件标签。 - 创建一个函数,帮助我们从给定的未来日期开始计算一天、几小时、几分钟和几秒。
- 混合之前的所有点
这个 demo 一些地方用到了 css 盒子模型,所以我们在 index.css 中写入:
* { box-sizing: border-box!important; }
创建<Box/ >组件
正如我之前所说的,我们想要构建一个可重用的组件。此组件只需要两个 props:
- labelPeriod(string):我们将通过“day”、“hours”等。但我们也可以通过“day ramaining”或“hours remaining”或“days of waiting”
- labelNumber(number):这将是一个来自 helper 函数的值。每次此值更改时,动画都会开始。
由于我们想要一个覆盖当前数字并显示下一个数字的动画,我们需要在这个组件上创建两个不同的面,并使用一个非常酷的 css 实用属性,称为transform-style: preserve-3d
。由于此特性与transform: rotateX(180deg)
相结合,我们可以有两个辐射面,其中背面旋转并被主面覆盖。