当前位置:首页 > JavaScript

js实现计时功能

2026-01-30 13:43:50JavaScript

使用 setInterval 实现计时器

通过 setInterval 可以创建一个周期性执行的计时器,适合需要持续更新的场景。

let seconds = 0;
const timer = setInterval(() => {
  seconds++;
  console.log(`已计时: ${seconds}秒`);
}, 1000);

// 停止计时器
// clearInterval(timer);

使用 setTimeout 实现单次延迟

setTimeout 适用于单次延迟执行,可通过递归实现循环计时。

let count = 0;
function startTimer() {
  setTimeout(() => {
    count++;
    console.log(`计数: ${count}`);
    startTimer(); // 递归调用
  }, 1000);
}
startTimer();

使用 Date 对象计算精确时间差

通过记录开始时间戳,实时计算已过去的时间,适合高精度需求。

const startTime = new Date().getTime();
function updateElapsedTime() {
  const currentTime = new Date().getTime();
  const elapsed = Math.floor((currentTime - startTime) / 1000);
  console.log(`已过去: ${elapsed}秒`);
  setTimeout(updateElapsedTime, 1000);
}
updateElapsedTime();

使用 performance.now() 获取高精度时间

适合需要毫秒级精度的场景,如性能测试。

const start = performance.now();
function checkTime() {
  const duration = (performance.now() - start).toFixed(2);
  console.log(`耗时: ${duration}毫秒`);
  requestAnimationFrame(checkTime); // 使用动画帧避免阻塞
}
checkTime();

封装为可复用计时器类

将功能封装为类,便于控制和管理。

class Timer {
  constructor() {
    this.seconds = 0;
    this.timerId = null;
  }

  start() {
    this.timerId = setInterval(() => {
      this.seconds++;
      console.log(this.seconds);
    }, 1000);
  }

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

const myTimer = new Timer();
myTimer.start();
// myTimer.stop();

页面显示实时计时

结合DOM操作实现可视化计时器。

js实现计时功能

<div id="display">0</div>
<button id="start">开始</button>
<button id="stop">停止</button>

<script>
  let timer;
  let seconds = 0;
  document.getElementById('start').addEventListener('click', () => {
    timer = setInterval(() => {
      seconds++;
      document.getElementById('display').textContent = seconds;
    }, 1000);
  });
  document.getElementById('stop').addEventListener('click', () => {
    clearInterval(timer);
  });
</script>

注意事项

  • setInterval 可能因主线程阻塞导致延迟,长时间运行需考虑误差累积。
  • 使用 requestAnimationFrame 可实现更平滑的动画计时。
  • 清除计时器时务必调用 clearIntervalclearTimeout,避免内存泄漏。

标签: 功能js
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js防抖和节流实现

js防抖和节流实现

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

js轮播图实现原理

js轮播图实现原理

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