用vue实现类ant Design的日历组件

本文介绍了一个在Vue项目中实现类似Ant Design日历组件的过程,包括解决input聚焦问题、日历生成算法、点击某一周选中整周功能及根据选中周获取后台数据的方法。详细讨论了每个问题的解决方案,例如使用事件阻止冒泡和动态计算日历格子中的日期等。
摘要由CSDN通过智能技术生成

前言

最近在对以前写的vue项目进行优化,并且进行了一些功能的完善,我写了一个周报系统,其中一个完善的功能就是,可以通过日历选择以往的周报。于是我着手ant Design的一些功能,自己实现了一个周报组件。

一些图片

  • 未选择时
    在这里插入图片描述
  • 鼠标移上去
    在这里插入图片描述
  • 选中状态
    在这里插入图片描述

问题

1. input聚焦问题

我的设想是这样的,日历首先是用v-if="show",show=false设置了隐藏,我们在点击input框的时候,日历会显示出来,然后我们在点击非日历的部分的时候,日历会隐藏。

 <div class="showWeek" @focus ="show=true" @blur="show=false" ref="showWeek" v-if="show"> 

为了实现这个功能,我给input输入框绑定了focus事件和blur,当focus事件触发时,日历显示,当blur事件触发时,日历隐藏。
可是这时出现了一个问题,我在对日历上的日期进行选择的时候,input框失去了焦距,触发了blur事件。

后面我想了一个办法,就是只给input框绑定click事件,设置一个stop防止冒泡,点击input之后日历显示,

<div class="showWeek" @click.stop ="show=true" ref="showWeek" v-if="show"> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值