当前位置:首页 > 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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…