当前位置:首页 > JavaScript

js 实现滚动数字

2026-01-30 13:50:17JavaScript

实现滚动数字的 JavaScript 方法

使用 CSS 动画和 JavaScript 控制

通过 CSS 的 transformtransition 属性实现数字滚动效果,JavaScript 用于动态更新数值。

function animateValue(element, start, end, duration) {
  const range = end - start;
  let current = start;
  const increment = end > start ? 1 : -1;
  const stepTime = Math.abs(Math.floor(duration / range));
  const timer = setInterval(() => {
    current += increment;
    element.textContent = current;
    if (current === end) clearInterval(timer);
  }, stepTime);
}

// 调用示例
const counter = document.getElementById('counter');
animateValue(counter, 0, 100, 2000);

使用 requestAnimationFrame 平滑滚动

requestAnimationFrame 提供更流畅的动画效果,适合高性能要求的场景。

function smoothScrollNumber(element, target, duration = 1000) {
  const start = parseInt(element.textContent) || 0;
  const startTime = performance.now();

  function updateNumber(timestamp) {
    const elapsed = timestamp - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const value = Math.floor(start + (target - start) * progress);
    element.textContent = value;
    if (progress < 1) requestAnimationFrame(updateNumber);
  }

  requestAnimationFrame(updateNumber);
}

// 调用示例
smoothScrollNumber(document.getElementById('counter'), 100);

使用第三方库(如 CountUp.js)

对于复杂需求,可直接使用现成库如 CountUp.js

<script src="https://cdn.jsdelivr.net/npm/countup.js@2.0.8/dist/countUp.min.js"></script>
<script>
  const options = {
    duration: 2,
    separator: ','
  };
  const counter = new CountUp('counter', 0, 100, 0, 2, options);
  counter.start();
</script>

实现数字翻转效果

模拟物理翻转卡片的效果,需配合 CSS 3D 变换。

function flipNumber(element, newValue) {
  const current = element.textContent;
  const flipContainer = document.createElement('div');
  flipContainer.className = 'flip-container';

  const flip = document.createElement('div');
  flip.className = 'flip';
  flip.textContent = current;

  const flipNext = document.createElement('div');
  flipNext.className = 'flip next';
  flipNext.textContent = newValue;

  flipContainer.appendChild(flip);
  flipContainer.appendChild(flipNext);
  element.innerHTML = '';
  element.appendChild(flipContainer);

  setTimeout(() => flip.classList.add('active'), 10);
  setTimeout(() => {
    element.textContent = newValue;
  }, 500);
}

// 调用示例
flipNumber(document.getElementById('counter'), 5);

对应 CSS 样式:

.flip-container {
  position: relative;
  display: inline-block;
  width: 1em;
  height: 1.2em;
  overflow: hidden;
}
.flip {
  position: absolute;
  width: 100%;
  height: 100%;
  text-align: center;
  transition: transform 0.4s;
  backface-visibility: hidden;
  transform-style: preserve-3d;
}
.flip.next {
  transform: rotateX(180deg);
}
.flip.active {
  transform: rotateX(-180deg);
}

注意事项

  • 性能优化:大数据量滚动时建议使用 requestAnimationFrame 而非 setInterval
  • 移动端兼容:检查 CSS 变换的浏览器前缀支持情况
  • 可访问性:确保动态内容能被屏幕阅读器识别,可添加 aria-live 属性

js 实现滚动数字

标签: 数字js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…