当前位置:首页 > VUE

vue实现年历

2026-01-07 00:42:32VUE

Vue 实现年历的方法

使用 Vue 实现年历可以通过组件化开发方式,结合日期计算和动态渲染完成。以下是两种常见的实现方式:

基于原生 Vue 的日历组件

创建 Calendar.vue 组件文件,核心逻辑包括日期计算和模板渲染:

<template>
  <div class="calendar">
    <div class="header">{{ currentYear }}年</div>
    <div class="months">
      <div v-for="month in 12" :key="month" class="month">
        <div class="month-title">{{ month }}月</div>
        <div class="days">
          <div v-for="day in getDaysInMonth(currentYear, month)" 
               :key="day" 
               class="day">
            {{ day }}
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentYear: new Date().getFullYear()
    }
  },
  methods: {
    getDaysInMonth(year, month) {
      return new Date(year, month, 0).getDate()
    }
  }
}
</script>

<style>
.calendar {
  font-family: Arial;
  width: 100%;
}
.months {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
}
.month {
  border: 1px solid #ddd;
  padding: 10px;
}
.days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
}
.day {
  text-align: center;
  padding: 5px;
}
</style>

使用第三方库 vue-cal

安装 vue-cal 库可以快速实现高级日历功能:

vue实现年历

npm install vue-cal @vueuse/core

组件实现示例:

<template>
  <vue-cal
    :time="false"
    :disable-views="['week', 'day']"
    active-view="year"
    :events="events"
    @ready="onCalendarReady"
  />
</template>

<script>
import VueCal from 'vue-cal'
import 'vue-cal/dist/vuecal.css'

export default {
  components: { VueCal },
  data() {
    return {
      events: [
        { start: '2023-01-15', end: '2023-01-15', title: '假期' },
        { start: '2023-07-01', end: '2023-07-01', title: '纪念日' }
      ]
    }
  },
  methods: {
    onCalendarReady() {
      console.log('Calendar ready')
    }
  }
}
</script>

实现功能扩展

添加月份切换功能

在原生实现中增加年份切换按钮:

vue实现年历

<template>
  <div>
    <button @click="prevYear">上一年</button>
    <span>{{ currentYear }}</span>
    <button @click="nextYear">下一年</button>
    <!-- 日历内容 -->
  </div>
</template>

<script>
export default {
  methods: {
    prevYear() {
      this.currentYear--
    },
    nextYear() {
      this.currentYear++
    }
  }
}
</script>

添加事件标记功能

为特定日期添加样式标记:

<template>
  <div class="day" 
       :class="{ 'has-event': hasEvent(currentYear, month, day) }">
    {{ day }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      markedDates: ['2023-01-01', '2023-10-01']
    }
  },
  methods: {
    hasEvent(year, month, day) {
      const dateStr = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`
      return this.markedDates.includes(dateStr)
    }
  }
}
</script>

<style>
.has-event {
  background-color: #ffeb3b;
  border-radius: 50%;
}
</style>

响应式设计考虑

针对移动端优化布局:

@media (max-width: 768px) {
  .months {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 480px) {
  .months {
    grid-template-columns: 1fr;
  }
}

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

相关文章

vue实现登录验证

vue实现登录验证

Vue 实现登录验证的方法 使用表单验证库 VeeValidate 安装 VeeValidate 库,可以快速实现表单验证功能。VeeValidate 提供了丰富的验证规则和错误提示功能。 npm…

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要通过内置组件和第三方库支持。 使用 Vue 内置过渡组件 Vue 的 transition 和 transition-group 组件可…

vue实现条件判断

vue实现条件判断

Vue 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式…

vue实现好友列表

vue实现好友列表

实现好友列表的Vue组件 数据准备 在Vue组件的data中定义好友列表数据,通常是一个数组对象,每个对象包含好友的基本信息如ID、头像、昵称等。 data() { return {…