数据统计卡片 4 款(数字滚动 + SVG 趋势图 CSS 源码)

CSSJSSVG 许可:自研原创

数据统计卡片组件源码:requestAnimationFrame 数字滚动、SVG 迷你趋势折线、今日/本周/本月周期切换、涨跌徽章,纯 CSS + 原生 JS 实现,适合后台仪表盘与数据看板。

效果演示(真实可交互)

下方为 4 张数据统计卡片:访问量、销售额、新增用户、转化率。页面加载时数字从 0 滚动到目标值;点击”今日 / 本周 / 本月”分段按钮,四张卡片联动刷新数值并带颜色闪烁反馈;每张卡片底部有一条彩色 SVG 迷你趋势折线,悬停卡片整体上浮。

访问量 ▲ 12.4%
0
销售额 ▲ 8.7%
0
新增用户 ▼ 2.1%
0
转化率 ▲ 1.6%
0

完整代码

HTML 结构:每张卡片包含标签、涨跌徽章、数字(由 data-target 指定目标值)与 SVG 折线:

<div class="ds-card">
  <div class="ds-top">
    <span class="ds-label">访问量</span>
    <span class="ds-trend up">▲ 12.4%</span>
  </div>
  <div class="ds-value" data-target="12860" data-decimals="0">0</div>
  <svg class="ds-spark" viewBox="0 0 100 30" preserveAspectRatio="none">
    <polyline points="0,24 12,20 24,22 36,14 48,16 60,10 72,12 84,6 100,8" />
  </svg>
</div>

核心 CSS:SVG 折线用 CSS 变量控制每张卡片的专属颜色,涨跌徽章用透明背景色块区分:

.ds-spark polyline { stroke: var(--ds-grad); stroke-width: 2; fill: none; }
.ds-card:nth-child(2) .ds-spark { --ds-grad: #43e97b; }
.ds-trend.up { color: #43e97b; background: rgba(67, 233, 123, .12); }
.ds-trend.down { color: #ff6b9d; background: rgba(255, 107, 157, .12); }

原生 JS 数字滚动(requestAnimationFrame + easeOutCubic):

function countTo(el, target, decimals) {
  const t0 = performance.now(), dur = 900;
  const ease = t => 1 - Math.pow(1 - t, 3);
  function step(now) {
    const t = Math.min((now - t0) / dur, 1);
    el.textContent = (target * ease(t)).toFixed(decimals);
    if (t < 1) requestAnimationFrame(step);
  }
  requestAnimationFrame(step);
}
periodBtns.forEach(btn => {
  btn.addEventListener('click', () => {
    applyPeriod(btn.dataset.p);   // 今日/本周/本月数据切换
  });
});

参数说明

参数默认值说明
data-target—数字滚动目标值,支持小数(如 3.42)
data-decimals0保留小数位数,千分位自动格式化
data-prefix / suffix空数字前后缀,如 ¥、%
滚动时长900ms单次数值动画时长
缓动函数easeOutCubic先快后慢,视觉更自然
周期数据 MAP3 组今日/本周/本月三套数值

兼容性与性能

常见问题

Q: 数值是假的吗?怎么接真实接口? 是演示数据。接入时用接口返回值替换 MAP 或直接调用 countTo(el, realValue, decimals) 即可,滚动逻辑通用。

Q: 折线图想换成柱状图或面积图? SVG 部分可替换为 <rect> 柱状或给 polyline 加 stroke 渐变 + 半透明填充形成面积图,卡片骨架无需改动。

Q: 数字滚动太快/太慢怎么调? 修改 dur 变量(默认 900ms),或换成 easeOutQuart 等更陡峭的缓动曲线。

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核