当前位置:首页 > VUE

vue记录时长前端实现

2026-03-27 01:27:42VUE

实现思路

前端记录时长通常涉及计时器、状态管理和持久化存储。Vue的响应式系统和生命周期钩子能很好地支持这类需求。

基础计时功能

使用setIntervaldata属性实现基础计时:

data() {
  return {
    seconds: 0,
    timer: null
  }
},
methods: {
  startTimer() {
    this.timer = setInterval(() => {
      this.seconds++
    }, 1000)
  },
  stopTimer() {
    clearInterval(this.timer)
  }
},
mounted() {
  this.startTimer()
},
beforeDestroy() {
  this.stopTimer()
}

持久化存储

结合localStorage实现关闭页面后仍保留计时:

data() {
  return {
    seconds: localStorage.getItem('timerSeconds') || 0
  }
},
watch: {
  seconds(newVal) {
    localStorage.setItem('timerSeconds', newVal)
  }
}

格式化显示

使用计算属性美化时间显示:

computed: {
  formattedTime() {
    const hours = Math.floor(this.seconds / 3600)
    const minutes = Math.floor((this.seconds % 3600) / 60)
    const secs = this.seconds % 60
    return `${hours}:${minutes}:${secs}`
  }
}

使用Vuex管理状态

对于复杂应用,建议使用Vuex集中管理计时状态:

// store.js
state: {
  timer: 0
},
mutations: {
  INCREMENT_TIMER(state) {
    state.timer++
  }
},
actions: {
  startTimer({ commit }) {
    setInterval(() => {
      commit('INCREMENT_TIMER')
    }, 1000)
  }
}

性能优化

对于精确计时,建议使用requestAnimationFrame

vue记录时长前端实现

methods: {
  startTimer() {
    let lastTime = performance.now()
    const update = () => {
      const now = performance.now()
      if (now - lastTime >= 1000) {
        this.seconds++
        lastTime = now
      }
      this.animationFrame = requestAnimationFrame(update)
    }
    this.animationFrame = requestAnimationFrame(update)
  },
  stopTimer() {
    cancelAnimationFrame(this.animationFrame)
  }
}

注意事项

  • 页面最小化时部分浏览器会降低定时器精度
  • 移动端浏览器可能为省电暂停后台页面计时
  • 长时间运行需考虑整数溢出问题
  • 多标签页同时运行时需使用BroadcastChannel同步状态

标签: 时长vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…