广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现日历组件
  • 549
分享到

vue实现日历组件

2024-04-02 19:04:59 549人浏览 薄情痞子
摘要

基于Vue实现日历组件,供大家参考,具体内容如下 年和月份是使用输入框来切换的,没有做成选择框,⬅️和➡️切换月份,红色选取是选取的日期实现思路和网上的大多数一样,首先是把月份的天

基于Vue实现日历组件,供大家参考,具体内容如下

年和月份是使用输入框来切换的,没有做成选择框,⬅️和➡️切换月份,红色选取是选取的日期
实现思路和网上的大多数一样,首先是把月份的天数存进一个数组

monthDay:[31,'',31,30,31,30,31,31,30,31,30,31],

由于二月的天数是不确定的,所以就先设置为空

然后去求选择的月份的第一天是星期几,通过 Date.getDay()函数,这个函数有一个注意事项,就是如果是星期天,他会返回0,这需要我们自己去处理一下

图中,2019年1月1号是星期二,所以前面就要给它一个空格块
下面代码中第一层循环就是在循环空格块,spaceDay表示需要几个空格

<p v-for="item in spaceDay" :key="item.id"></p>
<p v-for="(item,idx) in (monthDay[this.month-1] || 30)" @click="setDay(idx)" :class="idx==activeDay?'active':''" :key="item.id">{{item}}</p>

下面贴出完整代码

<template>
    <div id="calender">
        <div class="txt-c p-10">
            <span @click="prev"> ⬅️ </span>
            <input type="text" v-model="year">年
            <input type="text" v-model="month" class="month">月
            <span @click="next"> ➡️️️️ </span>
        </div>
        <div class="weekDay flex jc-sb p-5 day" >
            <p v-for="item in weekList" :key="item.id">{{item}}</p>
        </div>
        <div class="weekDay flex p-5 day">
            <p v-for="item in spaceDay" :key="item.id"></p>
            <p v-for="(item,idx) in (monthDay[this.month-1] || 30)" @click="setDay(idx)" :class="idx==activeDay?'active':''" :key="item.id">{{item}}</p>
        </div>
    </div>
</template>

<script>
    export default {
        name: "calender",
        data(){
            return{
                year: '', // 年份
                month: '', // 月份
                day: '', // 天数
                current: '', // 当前时间
                weekList:['周一','周二','周三','周四','周五','周六','周日'],
                monthDay:[31,'',31,30,31,30,31,31,30,31,30,31],
                activeDay: '', // 选中的日期
                spaceDay: '', // 每个月第一天是星期几
                February:'' // 判断2月份的天数
            }
        },
        created(){
            this.current = new Date()
            this.getTheCurrentDate()
            this.getMonthFisrtDay()
            this.February = this.isLeapYear(this.year) ? 28 : 29
            this.monthDay.splice(1,1,this.February)
        },
        watch:{
          month(){
              if(this.month>12||this.month<1){
                  console.log('请输入正确月份')
                  return
              }
              this.getMonthFisrtDay()
          },
          year(){
              this.getMonthFisrtDay()
          }
        },
        methods:{
            // 判断是否是闰年
            isLeapYear(year){
            
                return year % 4 == 0 && year % 100 != 0 ||year % 400 == 0;
            },
            // 选取特定天数
            setDay(idx){
                this.activeDay = idx
                this.day = idx + 1
                console.log('选择的日期是'+this.year+' '+this.month+' '+this.day)
            },
            // 判断月份的第一天是星期几
            getMonthFisrtDay(){
                var firstDayOfCurrentMonth = new Date(this.year,this.month-1,1) // 某年某月的第一天
                if(firstDayOfCurrentMonth.getDay() == 0){
                    this.spaceDay = 6
                } else {
                    this.spaceDay = firstDayOfCurrentMonth.getDay() - 1
                }
            },
            // 获取当前的日期
            getTheCurrentDate(){
                this.year = this.current.getFullYear()
                this.month = this.current.getMonth() + 1
                this.day = this.current.getDate()
            },
            prev(){
                if(this.month==1){
                    this.year--
                    this.month=12
                }else{
                    this.month--
                }
                this.activeDay = 0
                this.getMonthFisrtDay()
            },
            next(){
                if(this.month==12){
                    this.year++
                    this.month=1
                }else{
                    this.month++
                }
                this.activeDay = 0
                this.getMonthFisrtDay()
            }
        }
    }
</script>

<style lang="sCSS" scoped>
#calender{
    .txt-c{
        text-align: center;
    }
    .p-10{
        padding: 2rem;
    }
    .p-5{
        padding: 1rem;
    }
    .flex {
        display: flex;
    }
    .jc-sb{
        justify-content: space-between;
    }
    input{
        width: 50px;
        &.month{
            width: 30px;
        }
    }
    .day{
        flex-wrap: wrap;
        p{
            width: 14.28%;
            
            text-align: center;
            line-height: 2.4rem;
            height: 2.4rem;
            position: relative;
            z-index: 100;
            &.active{
                color: #fff;
            }
            &.active:before{
                content: '';
                height: 2.5rem;
                width: 2.5rem;
                position: absolute;
                z-index: -1;
                left: 0;
                top: 0;
                transfORM: translateX(50%);
                border-radius: 50%;
                background: #e97163;
                color: #fff;
            }
        }
    }
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue实现日历组件

本文链接: https://www.lsjlt.com/news/146299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现日历组件
    基于VUE实现日历组件,供大家参考,具体内容如下 年和月份是使用输入框来切换的,没有做成选择框,⬅️和➡️切换月份,红色选取是选取的日期实现思路和网上的大多数一样,首先是把月份的天...
    99+
    2022-11-13
  • 如何实现vue日历组件
    这篇文章主要介绍了如何实现vue日历组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 前言最近做项目遇到一个需求,需要制作一个定制化的日历组件(项目使用的UI框架不能满...
    99+
    2023-06-29
  • vue版日历组件的实现方法
    开发背景 常用日历组件可能满足不了我们自定义的多种需求(比如样式),因此通常情况下我们可能需要自己手动开发款日历,先上图 开发流程 1. 根据常用日历样式,我们template部分...
    99+
    2022-11-13
  • vue的h5日历组件实现详解
    本文实例为大家分享了vue的h5日历组件实现代码,供大家参考,具体内容如下 日历样式自定义 日历组件 <template>   <section class="...
    99+
    2022-11-13
  • vue实现垂直无限滑动日历组件
    用vue做了一个垂直无限滑动日历,在这里记录一下实现。 效果 组件 verticalCalendar.vue <template>   <div ref="con...
    99+
    2022-11-13
  • 从零写vue日历组件
    目录1. 前言2. vue日历制作2.1 制作月份选择器2.2 制作日历2.2.1 获取当前月所要显示的日期2.2.2 给不同的日期添加不同的样式2.3 将月份选择器和日历组件组合使...
    99+
    2022-11-13
  • Flutter 日历组件简单实现
    目录前言安装效果demo 演示业务使用 headerView使用配置属性DEMO感谢前言 近期有个业务需求,涉及用户付费相关的计算,需要一个日历组件,组件功能如下: 仅支持从明天开始...
    99+
    2022-11-13
    Flutter 日历组件 Flutter 日历
  • 如何封装vue日历组件
    这篇文章将为大家详细讲解有关如何封装vue日历组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下图示封装的组件的代码如下<template>  <div&...
    99+
    2023-06-29
  • vue怎么实现垂直无限滑动日历组件
    这篇文章主要介绍“vue怎么实现垂直无限滑动日历组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现垂直无限滑动日历组件”文章能帮助大家解决问题。效果组件verticalCalendar...
    99+
    2023-06-30
  • vue日历组件的封装方法
    本文实例为大家分享了vue日历组件的封装代码,供大家参考,具体内容如下 图示 封装的组件的代码如下 <template>   <div class="calend...
    99+
    2022-11-13
  • 基于vue2实现一个日历组件
    目录QCalendar.scssgetRangeDay.jsformatTime.jsQCalendar.vue日历组件效果图日月年tips总结不用任何第三方库,只基于vue2实现一...
    99+
    2022-12-29
    vue日历组件 切换月周日都可选择 vue 日历 Vue 日程日历
  • Vue如何实现日历
    这篇文章主要介绍了Vue如何实现日历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。组件(component)是Vue最强大的功能之一。组件可...
    99+
    2022-10-19
  • 基于element日历组件实现签卡记录
    本文实例为大家分享了基于element日历组件实现签卡记录的具体代码,供大家参考,具体内容如下 使用element日历组件为基础,实现可以查看每天签卡记录 <template&...
    99+
    2022-11-13
  • vue3.0实现考勤日历组件使用详解
    本文实例为大家分享了vue3.0实现考勤日历组件使用的具体代码,供大家参考,具体内容如下 自定义日历组件,首先我们要明确需求与面板展示内容 1、周日~周六。2、当前月日历1~(28...
    99+
    2022-11-13
  • vue自定义可选时间的日历组件
    本文实例为大家分享了vue自定义可选时间日历组件的具体代码,供大家参考,具体内容如下 日历功能: 1、过去时间不可选择 2、可自定义不可选时间 3、本月默认展示当天,其他月展示第一天...
    99+
    2022-11-12
  • vue实现价格日历效果
    本文实例为大家分享了vue实现价格日历效果的具体代码,供大家参考,具体内容如下 1、效果图 2、下载全局安装:npm install ele-calendar 3、在compone...
    99+
    2022-11-12
  • vue实现签到日历效果
    本文实例为大家分享了vue实现签到日历效果的具体代码,供大家参考,具体内容如下 先看看我们的效果图: 一、页面部分: <template>   <div clas...
    99+
    2022-11-13
  • 基于Vue3实现日历组件的示例代码
    以下是一个基于 Vue 3 实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份等功能。 <template>...
    99+
    2023-05-17
    Vue3实现日历组件 Vue3日历组件 Vue3日历 Vue 日历
  • vue中使用element日历组件的示例代码
    先看下效果图: 完整代码附上 <template> <div class="newSeeds" id="famerCalendar"> ...
    99+
    2022-11-12
  • 怎么封装一个vue自定义日历组件
    这篇文章主要介绍“怎么封装一个vue自定义日历组件”,在日常操作中,相信很多人在怎么封装一个vue自定义日历组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么封装一个vue自定义日历组件”的疑惑有所帮助!...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作