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 相关文章推荐
调用js时ie6和ie7,ff的区别
Aug 19 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
Mar 28 Javascript
Javascript节点关系实例分析
May 15 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
Node.js log4js日志管理详解
Jul 31 Javascript
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
在小程序中推送模板消息的实现方法
Jul 22 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
解决vue无法侦听数组及对象属性的变化问题
Jul 17 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 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二分法在IP地址查询中的应用
2008/08/12 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
JS实现div居中示例
2014/04/17 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python标准库OS模块详解
2020/03/10 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
酒店总经理欢迎词
2014/01/15 职场文书
电气个人求职信范文
2014/02/04 职场文书
《在家里》教后反思
2014/03/01 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
思想品德课教学反思
2016/02/24 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
SQLServer之常用函数总结详解
2021/08/30 SQL Server