当前位置:首页 > JavaScript

js实现倒计时秒

2026-03-01 03:32:37JavaScript

使用 setInterval 实现倒计时秒

通过 setInterval 定时器每秒更新倒计时显示,适用于简单的倒计时需求。

function countdown(seconds, callback) {
  const timer = setInterval(() => {
    console.log(seconds);
    seconds--;
    if (seconds < 0) {
      clearInterval(timer);
      callback && callback();
    }
  }, 1000);
}

// 示例:10秒倒计时结束后打印提示
countdown(10, () => console.log('倒计时结束'));

使用 requestAnimationFrame 实现高精度倒计时

通过 requestAnimationFrame 实现更平滑的倒计时,避免 setInterval 的误差积累问题。

function countdown(seconds, callback) {
  const startTime = Date.now();
  const endTime = startTime + seconds * 1000;

  function update() {
    const remaining = Math.max(0, Math.ceil((endTime - Date.now()) / 1000));
    console.log(remaining);
    if (remaining > 0) {
      requestAnimationFrame(update);
    } else {
      callback && callback();
    }
  }
  update();
}

// 示例:5秒倒计时
countdown(5, () => console.log('时间到'));

带暂停/继续功能的倒计时

通过状态管理实现可暂停的倒计时功能。

class Countdown {
  constructor(seconds, callback) {
    this.remaining = seconds;
    this.callback = callback;
    this.timer = null;
  }

  start() {
    this.timer = setInterval(() => {
      console.log(this.remaining);
      this.remaining--;
      if (this.remaining < 0) {
        this.stop();
        this.callback && this.callback();
      }
    }, 1000);
  }

  pause() {
    clearInterval(this.timer);
  }

  stop() {
    clearInterval(this.timer);
    this.timer = null;
  }
}

// 使用示例
const cd = new Countdown(3, () => console.log('结束'));
cd.start();
// cd.pause();  // 可随时暂停

页面显示的DOM倒计时

实现将倒计时显示在HTML页面上的完整示例。

js实现倒计时秒

<div id="countdown">10</div>
<button id="startBtn">开始</button>
<button id="pauseBtn">暂停</button>

<script>
  let timer;
  let seconds = 10;
  const display = document.getElementById('countdown');

  document.getElementById('startBtn').addEventListener('click', () => {
    clearInterval(timer);
    timer = setInterval(() => {
      display.textContent = seconds--;
      if (seconds < 0) {
        clearInterval(timer);
        display.textContent = '时间到';
      }
    }, 1000);
  });

  document.getElementById('pauseBtn').addEventListener('click', () => {
    clearInterval(timer);
  });
</script>

注意事项

  1. setInterval 可能因主线程阻塞导致时间不准确,重要场景建议使用服务器时间或Web Worker
  2. 移动端页面切到后台时定时器可能被暂停,需要监听 visibilitychange 事件
  3. 长时间倒计时需考虑内存泄漏问题,及时清除定时器
  4. 样式优化可添加过渡动画增强用户体验

标签: 倒计时js
分享给朋友:

相关文章

vue实现倒计时

vue实现倒计时

Vue 实现倒计时的方法 使用 setInterval 实现基础倒计时 通过 Vue 的 data 定义倒计时时间,使用 setInterval 进行倒计时操作,并在组件销毁时清除定时器。 <…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…