当前位置:首页 > VUE

vue实现秒表

2026-02-10 15:11:35VUE

Vue 实现秒表功能

以下是一个基于 Vue 3 的秒表实现方案,包含开始、暂停、重置功能,并支持显示毫秒级精度。

组件模板部分

<template>
  <div class="stopwatch">
    <div class="display">{{ formattedTime }}</div>
    <div class="controls">
      <button @click="start" :disabled="isRunning">开始</button>
      <button @click="pause" :disabled="!isRunning">暂停</button>
      <button @click="reset">重置</button>
    </div>
  </div>
</template>

脚本部分

<script>
import { ref, computed, onUnmounted } from 'vue';

export default {
  setup() {
    const startTime = ref(0);
    const elapsedTime = ref(0);
    const timerInterval = ref(null);
    const isRunning = ref(false);

    const formattedTime = computed(() => {
      const date = new Date(elapsedTime.value);
      return date.toISOString().substr(11, 12);
    });

    const start = () => {
      if (isRunning.value) return;
      isRunning.value = true;
      startTime.value = Date.now() - elapsedTime.value;
      timerInterval.value = setInterval(() => {
        elapsedTime.value = Date.now() - startTime.value;
      }, 10);
    };

    const pause = () => {
      if (!isRunning.value) return;
      isRunning.value = false;
      clearInterval(timerInterval.value);
    };

    const reset = () => {
      isRunning.value = false;
      clearInterval(timerInterval.value);
      elapsedTime.value = 0;
    };

    onUnmounted(() => {
      clearInterval(timerInterval.value);
    });

    return {
      formattedTime,
      isRunning,
      start,
      pause,
      reset
    };
  }
};
</script>

样式部分

<style scoped>
.stopwatch {
  text-align: center;
  margin: 20px;
}

.display {
  font-size: 2em;
  margin-bottom: 20px;
  font-family: monospace;
}

button {
  margin: 0 5px;
  padding: 8px 16px;
  font-size: 1em;
  cursor: pointer;
}

button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
</style>

实现说明

  1. 核心逻辑:使用 Date.now() 获取当前时间戳,通过计算时间差实现计时功能。

  2. 响应式数据

    • startTime 记录开始计时的时间点
    • elapsedTime 存储已过去的时间(毫秒)
    • timerInterval 保存计时器引用
    • isRunning 控制计时器状态
  3. 格式化显示:通过 computed 属性将毫秒转换为 HH:MM:SS.mmm 格式。

  4. 生命周期:在组件卸载时清除计时器,防止内存泄漏。

  5. 控制按钮:提供开始、暂停、重置三个基本功能,并禁用不合适的操作。

    vue实现秒表

功能扩展建议

  1. 添加分段计时功能(Lap Time)
  2. 增加声音提示
  3. 支持保存历史记录
  4. 添加全屏显示模式
  5. 实现更精确的计时(使用 performance.now()

该实现采用了 Vue 3 的组合式 API,如需在 Vue 2 中使用,可改用选项式 API 并调整相应语法。

标签: 秒表vue
分享给朋友:

相关文章

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…

自实现vue

自实现vue

实现 Vue 的核心功能 要实现一个简化版的 Vue,需要理解其核心功能:数据响应式、模板编译、虚拟 DOM 和组件系统。以下是关键步骤的分解: 数据响应式 Vue 使用 Object.define…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…

vue实现批量删除

vue实现批量删除

实现批量删除功能 在Vue中实现批量删除功能通常需要结合前端界面和后端API交互。以下是一个常见的实现方案: 数据准备与界面交互 创建数据列表和选中状态管理 data() { return {…

vue实现快递查询

vue实现快递查询

实现思路 通过调用第三方快递查询API接口,结合Vue.js框架实现快递单号查询功能。需要用户输入快递单号和选择快递公司,点击查询后显示物流信息。 准备工作 注册快递查询API服务(如快递1…