活动卡片(实时倒计时 + 报名按钮状态 CSS 源码)

CSSJS 许可:自研原创

活动卡片组件源码:渐变日期徽章、活动标签与详情、实时天时分秒倒计时、报名按钮成功态切换与人数统计,纯 CSS + 原生 JS 实现,适合活动页与会议宣传位。

效果演示(真实可交互)

下方为活动卡片:左上角渐变日期徽章展示”09月09日”,正文包含活动标签与简介,中部为天/时/分/秒四段倒计时,每秒刷新;点击”立即报名”按钮会变为绿色”✓ 报名成功”状态,报名人数同步 +1。

09 09月

粤喵前端组件大会 2026

📅 2026-09-09 14:00 · 📍 广州琶洲会展中心

# 前端 # CSS 动效 # 开源

聚焦组件化开发与动效实践:8 位讲师分享真实项目踩坑经验,现场还有组件源码工作坊与自由交流环节,报名即送粤喵组件站年度会员。

0天
:
0时
:
0分
:
0秒
已有 1,286 人报名

完整代码

HTML 结构:卡片包含日期徽章、标题与时间地点、标签行、活动描述、倒计时区块与报名操作区:

<div class="ev-card">
  <div class="ev-head">
    <div class="ev-date"><b>09</b><span>09月</span></div>
    <div class="ev-title-box">
      <h3>粤喵前端组件大会 2026</h3>
      <p>📅 2026-09-09 14:00 · 📍 广州琶洲会展中心</p>
    </div>
  </div>
  <div class="ev-count">
    <div class="ev-unit"><b>0</b><span>天</span></div>
    <span class="ev-colon">:</span>
    <div class="ev-unit"><b>0</b><span>时</span></div>
    <!-- 分 / 秒 同理 -->
  </div>
  <button class="ev-btn">立即报名</button>
  <span>已有 1,286 人报名</span>
</div>

核心 CSS:倒计时数字使用渐变文字 + 等宽数字(tabular-nums)防止每秒跳动时宽度抖动;报名成功态切换为绿色:

.ev-num {
  font-size: 28px; font-weight: 800; font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, #fff, #9db4ff);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.ev-btn.done {
  background: linear-gradient(135deg, #43e97b, #38f9d7); color: #0d3b2a;
  cursor: default;
}

原生 JS 倒计时与报名逻辑:

const TARGET = new Date('2026-09-09T14:00:00+08:00');
function tick() {
  const diff = Math.max(0, TARGET - Date.now());
  days.textContent = pad(Math.floor(diff / 86400000));
  hours.textContent = pad(Math.floor(diff / 3600000) % 24);
  mins.textContent = pad(Math.floor(diff / 60000) % 60);
  secs.textContent = pad(Math.floor(diff / 1000) % 60);
}
tick();
setInterval(tick, 1000);

regBtn.addEventListener('click', () => {
  if (regBtn.classList.contains('done')) return;
  regBtn.classList.add('done');
  regBtn.textContent = '✓ 报名成功';
  joined.textContent = '已有 ' + (++count).toLocaleString('en-US') + ' 人报名';
});

参数说明

参数默认值说明
目标时间 TARGET2026-09-09 14:00倒计时截止时间,改为任意 new Date() 即可
刷新频率1000ms每秒更新一次秒位
报名人数初始值1286演示数据,生产从接口读取
成功态文案✓ 报名成功报名后的按钮状态,防止重复提交
数字渐变#fff → #9db4ff倒计时数字的纵向渐变

兼容性与性能

常见问题

Q: 活动结束后倒计时显示什么? 组件会定格在 0 天 0 时 0 分 0 秒,此时可搭配”活动已结束”文案或跳转回放链接。

Q: 时间从服务器获取怎么处理? 用接口返回的服务器时间戳计算差值(serverTime - Date.now() 校准),避免用户本地时钟不准导致倒计时偏差。

Q: 报名人数需要防重复点击吗? 已内置:按钮变为 done 状态后再次点击直接 return;生产环境还应接入后端接口做幂等校验。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名,替换活动信息与目标时间即可上线。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核