当前位置:首页 > JavaScript

js实现自定义倒计时器

2026-04-05 04:28:12JavaScript

实现自定义倒计时器

以下是一个基于JavaScript的自定义倒计时器实现方案,支持灵活配置和功能扩展。

js实现自定义倒计时器

基本倒计时功能实现

class CountdownTimer {
  constructor(endTime, updateCallback, finishCallback) {
    this.endTime = new Date(endTime).getTime();
    this.updateCallback = updateCallback;
    this.finishCallback = finishCallback;
    this.timer = null;
  }

  start() {
    this.timer = setInterval(() => {
      const now = new Date().getTime();
      const distance = this.endTime - now;

      if (distance <= 0) {
        this.stop();
        if (this.finishCallback) this.finishCallback();
        return;
      }

      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);

      if (this.updateCallback) {
        this.updateCallback({ days, hours, minutes, seconds });
      }
    }, 1000);
  }

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

使用示例

// 创建倒计时实例
const timer = new CountdownTimer(
  '2024-12-31T23:59:59', 
  (time) => {
    console.log(`${time.days}天 ${time.hours}小时 ${time.minutes}分 ${time.seconds}秒`);
  },
  () => {
    console.log('倒计时结束!');
  }
);

// 启动倒计时
timer.start();

// 如需停止
// timer.stop();

高级功能扩展

格式化输出支持

js实现自定义倒计时器

class CountdownTimer {
  // ...原有代码...

  formatTime({ days, hours, minutes, seconds }) {
    return `${this.padZero(days)}:${this.padZero(hours)}:${this.padZero(minutes)}:${this.padZero(seconds)}`;
  }

  padZero(num) {
    return num < 10 ? `0${num}` : num;
  }
}

暂停/继续功能

class CountdownTimer {
  constructor(endTime, updateCallback, finishCallback) {
    // ...原有代码...
    this.remainingTime = 0;
    this.isPaused = false;
  }

  pause() {
    if (!this.isPaused) {
      clearInterval(this.timer);
      this.remainingTime = this.endTime - new Date().getTime();
      this.isPaused = true;
    }
  }

  resume() {
    if (this.isPaused) {
      this.endTime = new Date().getTime() + this.remainingTime;
      this.start();
      this.isPaused = false;
    }
  }
}

页面显示示例

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

<script>
const display = document.getElementById('countdown');
const timer = new CountdownTimer(
  '2024-12-31T23:59:59',
  (time) => {
    display.textContent = timer.formatTime(time);
  },
  () => {
    display.textContent = '活动已结束!';
  }
);
timer.start();
</script>

注意事项

  • 确保传入的结束时间是有效的Date可解析格式
  • 考虑时区问题,建议使用ISO格式日期字符串
  • 在组件卸载或页面离开时调用stop()方法清除定时器
  • 对于长时间倒计时,可考虑使用Web Worker避免主线程阻塞

这个实现提供了基本倒计时功能,并可通过扩展方法增加更多自定义功能,如不同时间单位显示、多语言支持、样式定制等。

分享给朋友:

相关文章

react如何删除自定义的组件

react如何删除自定义的组件

删除自定义组件的步骤 在React中删除自定义组件需要从代码中移除其定义和所有引用。以下是具体操作方法: 移除组件引用 检查项目中所有使用该组件的地方,包括其他组件、页面或测试文件,删除所有impo…

用js实现一个倒计时器

用js实现一个倒计时器

实现一个简单的倒计时器 创建一个基础的HTML文件结构,包含显示倒计时的元素 <!DOCTYPE html> <html> <head> <titl…

jquery 计时器

jquery 计时器

jQuery 计时器实现方法 使用 jQuery 实现计时器功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 setInterval 实现倒计时 var count = 10…

jquery计时器

jquery计时器

jQuery计时器的实现方法 使用jQuery实现计时器功能可以通过多种方式完成,以下是几种常见的实现方法: 基于setInterval的计时器 var seconds = 0; var time…

java如何自定义类

java如何自定义类

自定义类的定义 在Java中,自定义类通过class关键字实现。类名需遵循大驼峰命名法(如MyClass),通常包含字段(属性)、构造方法和方法。 public class Person {…

vue实现自定义主页

vue实现自定义主页

Vue 实现自定义主页的方法 创建 Vue 项目 使用 Vue CLI 或 Vite 创建一个新的 Vue 项目。Vue CLI 是官方提供的脚手架工具,适合快速搭建项目结构。Vite 是新一代前端构…