当前位置:首页 > JavaScript

js实现倒数

2026-03-15 00:59:38JavaScript

js实现倒数

实现倒计时的 JavaScript 方法

使用 setInterval 实现基础倒计时

let count = 10; // 初始倒计时秒数
const timer = setInterval(() => {
  console.log(count);
  count--;
  if (count < 0) {
    clearInterval(timer);
    console.log('倒计时结束');
  }
}, 1000);

带日期计算的精确倒计时

const targetDate = new Date('2023-12-31T23:59:59').getTime();
const timer = setInterval(() => {
  const now = new Date().getTime();
  const distance = targetDate - now;

  const days = Math.floor(distance / (1000 * 60 * 60 * 24));
  const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  const seconds = Math.floor((distance % (1000 * 60)) / 1000);

  console.log(`${days}天 ${hours}小时 ${minutes}分钟 ${seconds}秒`);

  if (distance < 0) {
    clearInterval(timer);
    console.log('倒计时结束');
  }
}, 1000);

使用 requestAnimationFrame 实现高性能倒计时

let startTime = Date.now();
const duration = 10000; // 10秒倒计时

function updateTimer() {
  const elapsed = Date.now() - startTime;
  const remaining = Math.max(0, duration - elapsed);

  const seconds = Math.floor(remaining / 1000);
  const milliseconds = remaining % 1000;

  console.log(`${seconds}.${milliseconds.toString().padStart(3, '0')}`);

  if (remaining > 0) {
    requestAnimationFrame(updateTimer);
  } else {
    console.log('倒计时结束');
  }
}

requestAnimationFrame(updateTimer);

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

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

  start() {
    this.startTime = Date.now();
    this.timer = setInterval(() => {
      this.remaining = this.duration - (Date.now() - this.startTime);
      if (this.remaining <= 0) {
        this.stop();
        this.callback();
      }
    }, 100);
  }

  pause() {
    clearInterval(this.timer);
    this.duration = this.remaining;
  }

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

// 使用示例
const countdown = new Countdown(10000, () => console.log('倒计时结束'));
countdown.start();
// countdown.pause(); // 暂停
// countdown.start(); // 继续

页面显示的倒计时实现

<div id="countdown">10</div>

<script>
  let timeLeft = 10;
  const countdownElement = document.getElementById('countdown');

  const timer = setInterval(() => {
    timeLeft--;
    countdownElement.textContent = timeLeft;

    if (timeLeft <= 0) {
      clearInterval(timer);
      countdownElement.textContent = '时间到!';
    }
  }, 1000);
</script>

这些方法覆盖了从简单到复杂的各种倒计时场景,可以根据具体需求选择适合的实现方式。对于需要高精度的场景,推荐使用 requestAnimationFrame 或带日期计算的实现;对于需要控制功能的场景,可以使用面向对象的实现方式。

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

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…