当前位置:首页 > JavaScript

js实现计时功能

2026-04-04 05:25:00JavaScript

使用 setInterval 实现计时功能

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

let seconds = 0;
const timerElement = document.getElementById('timer');

const timer = setInterval(() => {
  seconds++;
  timerElement.textContent = `已运行: ${seconds} 秒`;
}, 1000);

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

使用 setTimeout 递归实现计时功能

递归调用 setTimeout 可以避免 setInterval 的潜在误差累积问题。

let seconds = 0;
const timerElement = document.getElementById('timer');

function updateTimer() {
  seconds++;
  timerElement.textContent = `已运行: ${seconds} 秒`;
  setTimeout(updateTimer, 1000);
}

updateTimer();

使用 Date 对象实现高精度计时

通过 Date 对象记录开始时间,计算时间差实现高精度计时。

const startTime = new Date();
const timerElement = document.getElementById('timer');

setInterval(() => {
  const elapsed = Math.floor((new Date() - startTime) / 1000);
  timerElement.textContent = `已运行: ${elapsed} 秒`;
}, 1000);

实现暂停/继续功能

扩展基础计时器,添加暂停和继续功能。

let seconds = 0;
let isPaused = false;
let timer;
const timerElement = document.getElementById('timer');

function startTimer() {
  timer = setInterval(() => {
    if (!isPaused) {
      seconds++;
      timerElement.textContent = `已运行: ${seconds} 秒`;
    }
  }, 1000);
}

function togglePause() {
  isPaused = !isPaused;
}

startTimer();

格式化时间显示

将秒数格式化为更易读的 HH:MM:SS 形式。

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

// 使用示例
timerElement.textContent = formatTime(seconds);

使用 Web Worker 实现后台计时

避免主线程阻塞,使用 Web Worker 实现精确的后台计时。

// worker.js
let seconds = 0;

setInterval(() => {
  seconds++;
  postMessage(seconds);
}, 1000);

// 主线程
const worker = new Worker('worker.js');
worker.onmessage = (e) => {
  document.getElementById('timer').textContent = `已运行: ${e.data} 秒`;
};

使用 requestAnimationFrame 实现动画计时

适合需要与屏幕刷新率同步的动画计时场景。

let startTime;
const timerElement = document.getElementById('timer');

function updateTimer(timestamp) {
  if (!startTime) startTime = timestamp;
  const elapsed = Math.floor((timestamp - startTime) / 1000);
  timerElement.textContent = `已运行: ${elapsed} 秒`;
  requestAnimationFrame(updateTimer);
}

requestAnimationFrame(updateTimer);

使用 performance.now() 实现高精度计时

Date 对象精度更高,适合需要微秒级精度的场景。

const startTime = performance.now();
const timerElement = document.getElementById('timer');

setInterval(() => {
  const elapsed = Math.floor((performance.now() - startTime) / 1000);
  timerElement.textContent = `已运行: ${elapsed} 秒`;
}, 1000);

实现倒计时功能

修改计时逻辑实现倒计时功能。

js实现计时功能

let countdown = 60; // 60秒倒计时
const timerElement = document.getElementById('timer');

const timer = setInterval(() => {
  countdown--;
  timerElement.textContent = `剩余时间: ${countdown} 秒`;
  if (countdown <= 0) clearInterval(timer);
}, 1000);

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

相关文章

vue实现收货功能

vue实现收货功能

Vue实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按钮…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…