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 扩展对input的一些操作方法
Oct 30 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
Aug 18 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
jQuery.position()方法获取不到值的安全替换方法
Mar 13 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
JS前向后瞻正则表达式定义与用法示例
Dec 27 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
关于js对textarea换行符的处理方法浅析
Aug 03 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
基于JavaScript实现轮播图效果
Jan 02 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
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页面缓存方法小结
2015/01/10 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
详细介绍Python的鸭子类型
2016/09/12 Python
python3.6的venv模块使用详解
2018/08/01 Python
Python饼状图的绘制实例
2019/01/15 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python中 * 的用法详解
2019/07/10 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
python实现猜单词游戏
2020/05/22 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
介绍一下gcc特性
2015/10/31 面试题
浪费资源的建议书
2014/03/12 职场文书
项目采购员岗位职责
2014/04/15 职场文书
新郎答谢词
2015/01/04 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技