当前位置:首页 > VUE

vue实现年历标记

2026-03-06 17:10:23VUE

实现年历标记的步骤

数据准备

创建一个数组存储需要标记的日期,每个日期对象包含日期和标记信息。

markedDates: [
  { date: '2023-10-01', mark: 'holiday' },
  { date: '2023-10-15', mark: 'meeting' }
]

日历组件渲染

使用v-for循环渲染月份,在每个月内部渲染日期格子。比较当前日期是否在标记数组中。

vue实现年历标记

<div v-for="month in months" :key="month">
  <div class="month-title">{{ month }}</div>
  <div class="days-grid">
    <div 
      v-for="day in getDaysInMonth(month)" 
      :key="day"
      :class="{ 'marked': isMarked(month, day) }"
    >
      {{ day }}
    </div>
  </div>
</div>

标记判断方法

实现isMarked方法检查日期是否被标记,格式化日期与标记数组比较。

vue实现年历标记

methods: {
  isMarked(month, day) {
    const dateStr = `${this.year}-${month}-${day}`;
    return this.markedDates.some(item => item.date === dateStr);
  }
}

样式处理

为标记日期添加特殊样式,通过CSS类名控制视觉效果。

.marked {
  background-color: #ffeb3b;
  position: relative;
}
.marked::after {
  content: '';
  position: absolute;
  bottom: 2px;
  left: 50%;
  width: 6px;
  height: 6px;
  background: red;
  border-radius: 50%;
  transform: translateX(-50%);
}

月份导航

添加年份和月份切换功能,使用计算属性动态生成日历数据。

computed: {
  months() {
    return Array.from({length: 12}, (_, i) => i + 1);
  }
}

完整示例

export default {
  data() {
    return {
      year: new Date().getFullYear(),
      markedDates: [
        { date: '2023-10-01', mark: 'holiday' },
        { date: '2023-10-15', mark: 'meeting' }
      ]
    }
  },
  methods: {
    getDaysInMonth(month) {
      return new Date(this.year, month, 0).getDate();
    },
    isMarked(month, day) {
      const dateStr = `${this.year}-${month}-${day}`;
      return this.markedDates.some(item => item.date === dateStr);
    }
  }
}

注意事项

  • 日期格式需保持一致,建议使用YYYY-MM-DD格式
  • 跨年处理需要考虑年份切换时的数据更新
  • 大量日期标记时建议使用对象或Map存储提高查找效率
  • 移动端需考虑触摸事件和响应式布局

标签: 年历标记
分享给朋友:

相关文章

vue实现检索内容标记

vue实现检索内容标记

Vue 实现检索内容标记的方法 在 Vue 中实现检索内容标记功能,可以通过以下步骤完成。核心思路是利用正则表达式匹配检索关键词,并使用 v-html 或自定义指令动态渲染高亮内容。 方法一:使用…

vue实现检索内容标记

vue实现检索内容标记

实现检索内容高亮标记的方法 在Vue中实现检索内容的高亮标记,可以通过以下方法实现: 使用v-html指令和正则表达式替换 创建一个方法,用于将匹配的检索词替换为带有高亮样式的HTML标签。在模板…