vue实现简单的日历效果


Posted in Javascript onSeptember 24, 2020

最近在项目中遇到了一个需求,在vue中创建一个组件,这个组件显示的是当前的日期,以及在当前的日需要处理的事项,处理的事项的信息会以后端的接口的形式返回。

需求确认后,搭建了一下,在这里记录了一下,现在是简单的实现了这个需求,但是肯定的是后期需要进行修改。

vue就不多说了,在vue中使用的是原生JS

效果图(基本没有样式,很low)

vue实现简单的日历效果

现在实现的都是最初级的版本,代码里面的容错,还有一些性能上的处理,并没有书写。

不多说,上代码:

首先是vue的html结构,很简单,里面添加了一些其他时间形式的显示,可根据具体使用场景增删

<div id="dateContainer">
  <div class="date__showNowTime">
  今天是 <span v-text="ynow"></span>年<span v-text="mnow+1"></span>月<span v-text="dnow"></span>日
  </div>
  <div class="nowTime">
  <button class="preMon" @click="preMon">上个月</button>
  <div class="thisMon">
   <span v-text="ynow"></span>/
   <span v-text="mnow+1"></span>
  </div>
  <button class="nextMon" @click="nextMon">下个月</button>
  </div>
  <table border="1" id="table">
 
  </table>
 
</div>

接下来是实现我们的这个需求的JS代码的位置了,关于js的代码,在代码里面存在一些注释,具体可以根据,代码的注释进行解读

export default {
 data() {
  return {
  newDate: '',//当前的日期的信息
  ynow: '',//当前的年数
  mnow: '',//当前的月份
  dnow: '',//当前的天数
  firstDay: '',//第一天
  firstnow: '',//当前的星期
  m_days: [],//每个月的天数
  tr_str: '',//行数
  }
 },
 methods: {
  getDaysInfo() {
  var _this = this;
  this.sureDate(_this);
  },
  is_leap(year) {//判断是不是闰年
  return (year%100==0?(year%400==0?1:0):(year%4==0?1:0));
  },
  //下面的是画表格的方法,这个方法会根据数据画出我们需要的表格
  drawTable(jsonHtml) {
  var _this = this;
  var str = `
  <tr class="xiqi">
   <td class="isRed">星期日</td>
   <td>星期一</td>
   <td>星期二</td>
   <td>星期三</td>
   <td>星期四</td>
   <td>星期五</td>
   <td class="isRed">星期六</td>
  </tr>`;
  var idx = '',date_str = '',isRed = '',hasMsg='';
  for(var i = 0; i< _this.tr_str; i++) {
   str+='<tr>';
   for(var k = 0; k < 7; k++) {
 
    idx = i*7+k;
    isRed = (k===0||k===6)?"isRed":"";
    date_str=idx-_this.firstnow+1;
   (date_str<=0 || date_str>this.m_days[this.mnow]) ? date_str=" " : date_str=idx-_this.firstnow+1;
   date_str==_this.dnow?hasMsg='<td class="thisDay" date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span></td>':hasMsg='<td date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span></td>';
 
   for(var l = 0, len = jsonHtml.length; l < len; l++) {
   if(date_str== jsonHtml[l].date) {
    var newStr = '<p>'+jsonHtml[l].msg +'</p>';
    date_str==_this.dnow?hasMsg='<td class="thisDay" date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span>'+ newStr+'</td>':hasMsg='<td date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span>'+ newStr+'</td>';
 
   }
   }
   str+=hasMsg;
   }
   str+='</tr>';
  }
  var table = document.getElementById('table');
  table.innerHTML = str;
  },
  //两个参数代表的含义分别是this对象以及判断当前的操作是不是在进行月份的修改
  sureDate(_this,other) {
  this.newDate = new Date();
  this.ynow = this.newDate.getFullYear();
  if(!other) {
   this.mnow=this.newDate.getMonth(); //月份
  }
  this.dnow=this.newDate.getDate(); //今日日期
  this.firstDay = new Date(this.ynow,this.mnow,1);
  this.firstnow=this.firstDay.getDay();
  this.m_days = [31,28+this.is_leap(this.ynow),31,30,31,30,31,31,30,31,30,31];
  this.tr_str = Math.ceil((_this.m_days[this.mnow] + this.firstnow)/7);
  this.showMsg();
  },
  preMon() {
  var _this = this;
  this.mnow--;
  this.sureDate(_this,"up");
  },
  nextMon() {
  var _this = this;
  this.mnow++;
  this.sureDate(_this,"next");
  },
  //通过接口返回的是我们当前的月份对应在日历中需要处理的事项
  showMsg() {
  var jsonHtml = [{
   date: 2,
   msg: '吃饭'
  },
  {
   date: 3,
   msg: '睡觉'
  },
  {
   date: 4,
   msg: '打豆豆'
  },
  {
   date: 6,
   msg: '豆豆不在家'
  },
  {
   date: 12,
   msg: '~~~~~'
  },
  {
   date: 15,
   msg: '怎么办~~~~'
  },
  {
   date: 20,
   msg: '找豆豆'
  }];
  this.drawTable(jsonHtml)
  }
 
 },
 mounted() {
  //画出当前的月份的天数对应的表格
  this.getDaysInfo();
  //进行数据的获取,显示到对应的位置
 }

js的代码目前的来说也就是这么多,里面只是初步实现了功能,其他什么都没进行处理~~~~

具体的实现可以访问我的github获取--点击打开链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
javascript父子页面通讯实例详解
Jul 17 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
JS与HTML结合实现流程进度展示条思路详解
Sep 03 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 Javascript
关于Js中new操作符的作用详解
Feb 21 Javascript
vue实现记事本功能
Jun 26 #Javascript
ES6 Set结构的应用实例分析
Jun 26 #Javascript
vue.js实现备忘录demo
Jun 26 #Javascript
ES6 Map结构的应用实例分析
Jun 26 #Javascript
vue实现日历备忘录功能
Sep 24 #Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 #Javascript
Vue.js实现备忘录功能
Jun 26 #Javascript
You might like
PHP获取网卡地址的代码
2008/04/09 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
学习vue.js计算属性
2016/12/03 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
vue车牌号校验和银行校验实战
2019/01/23 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
Python 中的 else详解
2016/04/23 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
python中类与对象之间的关系详解
2020/12/16 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
护理职业生涯规划书
2014/01/24 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
教师师德工作总结2015
2015/07/22 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
Golang中channel的原理解读(推荐)
2021/10/16 Golang
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫