当前位置:首页 > VUE

vue实现打卡天数

2026-03-26 19:09:19VUE

Vue实现打卡天数功能

数据存储设计

使用localStorage或Vuex持久化存储打卡记录,确保刷新页面后数据不丢失。推荐数据结构:

{
  lastCheckDate: '2023-11-20', // 最后打卡日期
  streakDays: 5,              // 连续打卡天数
  history: ['2023-11-16', ...] // 历史打卡记录
}

打卡逻辑实现

创建打卡处理方法,需包含日期连续性校验:

methods: {
  handleCheckIn() {
    const today = new Date().toISOString().split('T')[0];
    if (this.lastCheckDate === today) return;

    const isConsecutive = this.checkConsecutive(today);
    this.streakDays = isConsecutive ? this.streakDays + 1 : 1;
    this.lastCheckDate = today;
    this.history.push(today);
  },

  checkConsecutive(newDate) {
    const lastDate = new Date(this.lastCheckDate);
    const currDate = new Date(newDate);
    return (currDate - lastDate) === 86400000; // 1天的毫秒数
  }
}

界面组件示例

创建打卡按钮和天数显示组件:

vue实现打卡天数

<template>
  <div class="check-in-container">
    <button @click="handleCheckIn" :disabled="isCheckedToday">
      {{ isCheckedToday ? '今日已打卡' : '立即打卡' }}
    </button>
    <div class="streak-count">
      已连续打卡 <strong>{{ streakDays }}</strong> 天
    </div>
    <calendar-view :events="history" />
  </div>
</template>

日历可视化

集成第三方日历组件(如v-calendar)展示打卡历史:

import { Calendar } from 'v-calendar';
components: { Calendar },
data() {
  return {
    attributes: [
      {
        dates: this.history,
        highlight: true
      }
    ]
  }
}

断签处理

实现断签提醒和重置逻辑:

vue实现打卡天数

watch: {
  lastCheckDate: {
    handler(newVal) {
      const today = new Date();
      const lastDay = new Date(newVal);
      if ((today - lastDay) > 86400000 * 2) {
        this.showBreakWarning();
        this.streakDays = 0;
      }
    },
    immediate: true
  }
}

持久化存储

使用vuex-persistedstate插件实现状态持久化:

import createPersistedState from 'vuex-persistedstate';
export default new Vuex.Store({
  plugins: [createPersistedState({
    key: 'checkInData'
  })]
});

动画效果

添加打卡成功动效增强用户体验:

.check-in-success {
  animation: bounce 0.5s;
}
@keyframes bounce {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.2); }
}

标签: 天数vue
分享给朋友:

相关文章

vue实现增删改

vue实现增删改

Vue 实现增删改查功能 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是使用 Vue.js 实现增删改查(CRUD)功能的方法。 数据初始化 在 Vue 实例的 data 中初始化一个…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…