Skip to content

HyaCiovo/React-Flip-Countdown

Repository files navigation

React-Flip-Countdown

简介

React-Flip-Countdown 是一个基于 React 的翻牌倒计时组件,支持动态显示天、小时、分钟和秒的倒计时效果。它通过 FlipCard 子组件实现翻牌动画,并提供灵活的配置选项以满足不同的倒计时需求。


参考

核心原理来自:Yuezi32/flipClock: 翻牌效果时钟的演示,包含原生JavaScript、Vue、React三种实现方式。

感谢 Yuezi32 (BetaQ) 大佬的开源代码。对ClipCard组件修改复用可以实现各种不同功能的翻牌器组件。


线上演示

React-Flip-Countdown

img


使用示例

import React from 'react';
import FlipCountdown from './components/flip-countdown';

const App = () => {
  const handleEnded = () => {
    console.log('倒计时结束!');
  };

  return (
    <div>
      <h1>FlipCountdown 示例</h1>
      <FlipCountdown
        type="Day"
        duration={1000 * 60 * 5} // 5 分钟倒计时
        onEnded={handleEnded}
      />
    </div>
  );
};

export default App;

依赖库

  • React:用于构建组件;
  • Tailwind CSS:补充样式方案;
  • clsx:轻量级的高性能classNames替代方案;
  • dayjs:不必多言;
  • react-hot-toast:一个不错的 React 通知库,不装antd时我就用ta;
  • React Hook Form:React 高性能表单库。

以上依赖库都是非必需的,不过作者强烈推荐。

可以在FlipCardFlipCountdown文件中的jscss代码上自行修改以适配不同的前端框架。


属性说明

参数名 类型 默认值 描述
duration number undefined 倒计时的持续时间(以毫秒为单位)。如果未设置,则默认为 5 分钟。
type `'Day' / 'Hour' / 'Minute' /
targetDate Date undefined 目标时刻。如果同时设置了 durationtargetDate,以 targetDate 为准。
onEnded () => void undefined 倒计时结束时的回调函数。

注意事项

  1. durationtargetDate 的优先级

    • 如果同时设置了 durationtargetDate,以 targetDate 为准。
    • 如果两者均未设置,默认倒计时时间为 5 分钟。
  2. type 属性的作用

    • 控制倒计时显示的时间单位范围。例如:
      • 'Day':仅显示天数。
      • 'Hour':显示天数和小时。
      • 'Minute':显示天数、小时和分钟。
      • 'Second':显示天数、小时、分钟和秒。

    注意:该选项的功能只是截取,不展示前面的卡片。例如如果选择Hour,而duration超过1天,或者targetDate在1天以后,并不会将时间转化成对应的小时数,而是减去24小时。

  3. 样式依赖

    • 组件依赖 index.module.less 文件中的样式,请确保正确引入。
    • 支持响应式设计,适配不同屏幕尺寸。
  4. 翻牌动画

    • 翻牌动画由 FlipCard 子组件实现,动画持续时间与 CSS 中的 animation-duration 保持一致。
  5. 自定义

    • 可以通过修改formatRemaining方法,来自定义时间展示逻辑。

示例场景

场景 1:目标时刻倒计时

代码

<FlipCountdown
  type="Day"
  targetDate={new Date('2025-05-01T23:59:59')}
  onEnded={() => alert('工人伟大,劳动光荣!')}
/>

效果

image-20250324092654569

场景 2:固定时长倒计时

代码

<FlipCountdown
  type="Minute"
  duration={1000 * 60 * 10} // 10 分钟倒计时
  onEnded={() => console.log('倒计时结束!')}
/>

效果

image-20250324092913872

场景 3:仅显示秒数

代码

<FlipCountdown
  type="Second"
  targetDate={new Date('2025-03-24T00:00:00')}
/>

效果

image-20250324093135432


样式说明

组件样式通过 index.module.less 文件定义,支持以下特性:

  • 响应式设计:根据屏幕尺寸调整字体大小和布局。
  • 翻牌动画:通过 CSS 动画实现翻转效果。
  • 自定义样式:可以通过覆盖 index.module.less 中的类名来自定义样式。

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。


组件目前功能较少,内部逻辑实现也比较简陋。如有任何问题或建议,请随时联系作者或提交 issue。欢迎各位同行和代码爱好者 star、 issue和 pr。

About

一个 react 的倒计时翻牌器组件

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published