当前位置:首页 > 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 实现中台系统的关键步骤 技术选型与基础搭建 使用 Vue 3(Composition API)或 Vue 2(Options API)作为前端框架,搭配 Vue Router 实现路由管理,V…

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式完成,具体取决于项目需求和路由管理方式。 使用 Vue Router Vue Router 是 Vue.js 官方提供…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [..…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…