当前位置:首页 > VUE

vue实现打卡进度组件

2026-01-23 09:39:48VUE

Vue 打卡进度组件实现

核心思路
通过动态计算已完成天数与总天数的比例,结合 CSS 动画或过渡效果,实现进度条或日历形式的打卡可视化。

基础进度条实现

模板部分

<template>
  <div class="progress-container">
    <div class="progress-bar" :style="{ width: progress + '%' }"></div>
    <span>{{ progress }}% 已完成</span>
  </div>
</template>

脚本部分

<script>
export default {
  props: {
    totalDays: { type: Number, default: 30 },
    completedDays: { type: Number, default: 0 }
  },
  computed: {
    progress() {
      return Math.round((this.completedDays / this.totalDays) * 100);
    }
  }
};
</script>

样式部分

vue实现打卡进度组件

<style scoped>
.progress-container {
  width: 100%;
  height: 20px;
  background-color: #f0f0f0;
  border-radius: 10px;
  position: relative;
}
.progress-bar {
  height: 100%;
  background-color: #4caf50;
  border-radius: 10px;
  transition: width 0.3s ease;
}
</style>

日历打卡形式实现

模板部分

<template>
  <div class="calendar-grid">
    <div 
      v-for="day in totalDays" 
      :key="day" 
      class="day-cell"
      :class="{ 'completed': day <= completedDays }"
    ></div>
  </div>
</template>

样式部分

<style scoped>
.calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 8px;
}
.day-cell {
  width: 30px;
  height: 30px;
  background-color: #e0e0e0;
  border-radius: 4px;
}
.day-cell.completed {
  background-color: #4caf50;
}
</style>

动画增强效果

添加点击动画
在日历形式中增加点击反馈:

vue实现打卡进度组件

.day-cell {
  transition: transform 0.2s;
}
.day-cell:active {
  transform: scale(0.9);
}

进度条加载动画

.progress-bar {
  animation: pulse 1.5s infinite;
}
@keyframes pulse {
  0% { opacity: 1; }
  50% { opacity: 0.7; }
  100% { opacity: 1; }
}

进阶功能扩展

持久化存储
结合 localStorage 保存打卡状态:

mounted() {
  const savedProgress = localStorage.getItem('progress');
  if (savedProgress) {
    this.completedDays = parseInt(savedProgress);
  }
},
methods: {
  handleDayClick(day) {
    if (day === this.completedDays + 1) {
      this.completedDays++;
      localStorage.setItem('progress', this.completedDays);
    }
  }
}

节日特殊样式
通过日期判断添加特殊样式:

computed: {
  dayClass() {
    return (day) => ({
      'holiday': this.isHoliday(day),
      'completed': day <= this.completedDays
    });
  }
}

注意事项

  1. 移动端适配需调整单元格大小和间距
  2. 国际化场景需动态显示周数/月份
  3. 大量天数时建议使用虚拟滚动优化性能
  4. 颜色方案可通过 CSS 变量实现主题切换

以上实现可根据实际需求组合使用,例如同时显示进度条和日历,或添加徽章奖励等激励元素。

标签: 进度组件
分享给朋友:

相关文章

vue 实现组件刷新

vue 实现组件刷新

实现组件刷新的方法 在Vue中,组件刷新通常指重新渲染组件或重置组件状态。以下是几种常见的实现方式: 使用v-if控制渲染 通过v-if指令可以销毁并重新创建组件: <template>…

vue实现多级组件

vue实现多级组件

Vue 多级组件实现方法 在 Vue 中实现多级组件通常涉及父子组件通信、动态组件或递归组件等技术。以下是几种常见实现方式: 父子组件嵌套 通过逐层嵌套组件实现多级结构,适用于固定层级场景:…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent] =…

vue抽屉组件实现

vue抽屉组件实现

Vue 抽屉组件实现 使用 Element UI 实现 Element UI 提供了现成的抽屉组件 el-drawer,可以快速实现抽屉效果。 安装 Element UI: npm install…

vue实现日历组件

vue实现日历组件

Vue 日历组件实现步骤 基础结构搭建 使用Vue 3的Composition API或Options API创建组件框架。核心结构包括年份/月份切换按钮、星期标题栏和日期网格。 <templ…