用vue写一个日历


Posted in Javascript onNovember 02, 2020

之前在上家公司做过一个公司人员考勤的东西,里面需要用到日历,当时自己用vue随便写了一个,比较简单,删掉了其他功能的代码,只留下日历,直接看代码

<template>
 <div class="lookForMonth_wrapper">
  <div class="lookForMonth_top">
   <div class="selectDate">
    <div>{{year}} 年 {{month}} 月</div>
    <div class="upDownSelect">
     <div class="upDownSelect_item" @click="dateUp"></div>
     <div class="upDownSelect_item" @click="dateDown"></div>
    </div>
   </div>
  </div>
  <div class="calendar" :style="calendarStyle">
   <div v-for="(item,index) in calendarData" class="calendar_item" :key='index' :class="{ash:item.color==='ash',date:index>6&&item.color!=='ash'}">
    <p class="dateEdit">{{item.label}}<i class="el-icon-edit-outline" v-if="item.color!=='ash'&&index>=7"></i></p>
    <p v-if='index>6'>上班</p> // 打工人
   </div>
  </div>
 </div>
</template>
<script>
export default {
 name: "lookForMonth",
 data: () => {
 return {
  calendarData: [{label:"日"},{label: "一"}, {label:"二"},{label: "三"},{label: "四"},{label: "五"},{label: "六"}], //日历循环渲染数据
  year: 0, //当前日期年
  month: 0, //当前日期月数
  date: 0, //当前日期号数
  day: -1, //当前星期几
 };
 },
 filters:{
 },
 computed: {
 // 根据当月日期详情更改日历表格高度
 calendarStyle() {
  if (this.calendarData.length > 42) {
  return "height: 701px;";
  } else {
  return "height: 601px;";
  }
 }
 },
 async created(){
 // 获取当前日期数据
 this.getNow();
 // 获取当前月份一号的时间戳
 let firstTime = +new Date(this.year,this.month-1,1,0,0,0)
 this.getCalendarDate(); // 给calendarData添加当月数据
 },
 mounted() {
 },
 methods: {
 // 获取当前时间
 getNow() {
  let now = new Date()
  this.year = +now.getFullYear()
  this.month = +now.getMonth() + 1
  this.date = +now.getDate()
  this.day = +now.getDay()
 },
 // 获取每个月的天数
 monthDay(month) {
  if ([1,3,5,7,8,10,12].includes(month)) {
  return 31
  } else if ([4,6,9,11].includes(month)) {
  return 30
  } else if (month === 2) {
  // 判断当年是否为闰年
  if (
   (this.year % 4 === 0 && this.year % 100 !== 0) ||
   this.year % 400 === 0
  ) {
   return 29
  } else {
   return 28
  }
  }
 },
 // 给calendarData添加当月数据
 getCalendarDate() {
  // 获取当前月份一号星期几
  let firstDay = new Date(this.year + "-" + this.month + "-" + "01").getDay();
  this.calendarData = [{label:"日"},{label: "一"}, {label:"二"},{label: "三"},{label: "四"},{label: "五"},{label: "六"}];
  let num = parseInt(firstDay);
  let nowDays = this.monthDay(this.month);
  let lastMonth = this.month - 1>0?this.month - 1:12;
  let lastDays = this.monthDay(lastMonth);
  // 循环添加上一个月数据
  for (let i = 0; i < num; i++) {
  this.calendarData.push({label:lastDays - num + i + 1,color:'ash'});
  }
  // 循环添加当月数据
  for (let i = 0; i < nowDays; i++) {
  this.calendarData.push({label:i + 1});
  }
  // 循环添加下一个月数据
  if (this.calendarData.length % 7 !== 0) {
  let surplusDay = 7 - (this.calendarData.length % 7);
  for (let i = 0; i < surplusDay; i++) {
   this.calendarData.push({label:i + 1,color:'ash'});
  }
  }
  this.loading = false
 },
 // 将日期调上
 dateUp() {
  this.month--;
  if (this.month <= 0) {
  this.year--;
  this.month = 12;
  }
  this.getCalendarDate(); // 给calendarData添加当月数据
 },
 // 将日期调下
 dateDown() {
  this.month++;
  if (this.month > 12) {
  this.year++;
  this.month = 1;
  }
  this.getCalendarDate(); // 给calendarData添加当月数据
 },
 }
};
</script>
<style lang="scss" scoped>
.lookForMonth_wrapper {
 padding: 20px;
 width: 701px;
 margin: auto;
}
.lookForMonth_top {
 margin-bottom: 20px;
 overflow: hidden;
 .selectTeacher {
 float: left;
 }
 .selectDate {
 height: 30px;
 line-height: 30px;
 float: right;
 display: flex;
 .upDownSelect {
  display: flex;
  flex-direction: column;
  margin-top: -2px;
  margin-left: 5px;
  .upDownSelect_item {
  width: 0;
  height: 0;
  border: 7px solid transparent;
  cursor: pointer;
  }
  .upDownSelect_item:nth-child(1) {
  border-bottom: 7px solid #666;
  margin-bottom: 5px;
  &:hover {
   border-bottom: 7px solid skyblue;
  }
  }
  .upDownSelect_item:nth-child(2) {
  border-top: 7px solid #666;
  &:hover {
   border-top: 7px solid skyblue;
  }
  }
 }
 }
}
/* 日历表样式=======================================↓ */
.calendar {
 width: 701px;
 border-top: 1px solid #ccc;
 border-left: 1px solid #ccc;
 display: flex;
 flex-wrap: wrap;
 box-sizing: border-box;
 .calendar_item {
 box-sizing: border-box;
 width: 100px;
 height: 100px;
 border-right: 1px solid #ccc;
 border-bottom: 1px solid #ccc;
 text-align: center;
 display: flex;
 flex-direction: column;
 justify-content: center;
 align-items: center;
 &.date:hover{
  background: #eee;
 }
 .status{
  margin-top: 10px;
  &.textBlue{
  color: blue;
  }
  &.textRed{
  color: brown;
  }
 }
 .el-icon-edit-outline{
  cursor: pointer;
  margin-left: 7px;
 }
 }
 .ash{
 color: gainsboro;
 }
 .dateEdit{
 margin-bottom: 10px;
 }
}
</style>

效果如下:

用vue写一个日历

以上就是利用vue写一个日历的详细内容,更多关于vue 日历的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
动态加载js的方法汇总
Feb 13 Javascript
javascript中call apply 的应用场景
Apr 16 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
Node.js返回JSONP详解
May 18 Javascript
js编写三级联动简单案例
Dec 21 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
May 31 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
详解vue在项目中使用百度地图
Mar 26 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
Apr 22 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 Javascript
在vue中使用vant TreeSelect分类选择组件操作
Nov 02 #Javascript
vant自定义二级菜单操作
Nov 02 #Javascript
JavaScript动态生成表格的示例
Nov 02 #Javascript
JavaScript实现图片放大预览效果
Nov 02 #Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
Nov 02 #Javascript
在antd4.0中Form使用initialValue操作
Nov 02 #Javascript
vue+iview使用树形控件的具体使用
Nov 02 #Javascript
You might like
ThinkPHP令牌验证实例
2014/06/18 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
python搭建微信公众平台
2016/02/09 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
后勤服务中心总经理工作职责
2014/03/03 职场文书
公司授权委托书范本
2014/04/03 职场文书
公司副总经理任命书
2014/06/05 职场文书
师德师风整改措施
2014/10/24 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript