当前位置:首页 > JavaScript

js实现计时器效果

2026-03-01 22:34:53JavaScript

实现基础计时器

使用 setInterval 创建基础计时器,每隔1秒更新显示时间:

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

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

格式化时间显示

将秒数转换为更易读的 HH:MM:SS 格式:

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600).toString().padStart(2, '0');
  const m = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0');
  const s = (seconds % 60).toString().padStart(2, '0');
  return `${h}:${m}:${s}`;
}

带控制按钮的计时器

HTML 结构配合 JavaScript 实现完整控制:

<div id="timer">00:00:00</div>
<button id="start">开始</button>
<button id="pause">暂停</button>
<button id="reset">重置</button>
let timerId;
let seconds = 0;
const display = document.getElementById('timer');

document.getElementById('start').addEventListener('click', () => {
  if (!timerId) {
    timerId = setInterval(() => {
      seconds++;
      display.textContent = formatTime(seconds);
    }, 1000);
  }
});

document.getElementById('pause').addEventListener('click', () => {
  clearInterval(timerId);
  timerId = null;
});

document.getElementById('reset').addEventListener('click', () => {
  clearInterval(timerId);
  timerId = null;
  seconds = 0;
  display.textContent = '00:00:00';
});

使用 requestAnimationFrame 实现高精度计时

适合需要更高精度的场景:

let startTime;
let elapsedTime = 0;
let animationFrameId;

function updateTimer(timestamp) {
  if (!startTime) startTime = timestamp;
  elapsedTime = timestamp - startTime;

  const seconds = Math.floor(elapsedTime / 1000);
  document.getElementById('timer').textContent = formatTime(seconds);

  animationFrameId = requestAnimationFrame(updateTimer);
}

// 启动
function start() {
  animationFrameId = requestAnimationFrame(updateTimer);
}

// 停止
function stop() {
  cancelAnimationFrame(animationFrameId);
}

带暂停功能的计时器

保存暂停时的状态以便恢复:

let startTime;
let pauseTime = 0;
let isRunning = false;

function startTimer() {
  if (!isRunning) {
    startTime = Date.now() - pauseTime;
    isRunning = true;
    updateDisplay();
  }
}

function pauseTimer() {
  if (isRunning) {
    pauseTime = Date.now() - startTime;
    isRunning = false;
    clearTimeout(timerId);
  }
}

function updateDisplay() {
  if (isRunning) {
    const elapsed = Date.now() - startTime;
    document.getElementById('timer').textContent = formatTime(Math.floor(elapsed / 1000));
    timerId = setTimeout(updateDisplay, 1000);
  }
}

js实现计时器效果

标签: 计时器效果
分享给朋友:

相关文章

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 动态数据绑定展示 通过 Vue 的响应式特性,实时展示数据变化。例如,表单输入与预览同步: <template> <div> <…

css制作卷边效果

css制作卷边效果

使用伪元素和渐变实现卷边效果 通过CSS伪元素和线性渐变可以模拟纸张卷边的视觉效果。这种方法不需要额外元素,仅通过::before或::after伪元素实现。 .element { positi…

css3制作立体效果

css3制作立体效果

使用 transform 属性实现立体旋转 通过 transform-style: preserve-3d 和 rotateX/Y/Z 实现 3D 空间变换: .container { t…

vue实现放大效果

vue实现放大效果

使用 CSS 过渡实现放大效果 通过 Vue 的 v-bind:class 或 v-bind:style 动态绑定 CSS 类或样式,结合 CSS 的 transform: scale() 实现平滑过…

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-…

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 Vue.js 提供了多种方式来实现动态效果展示,以下是一些常见的方法: 使用 Vue 的过渡和动画系统 Vue 内置了 <transition> 和 <…