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 相关文章推荐
用JavaScript显示随机图像或引用
Apr 21 Javascript
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
javascript getElementsByClassName实现代码
Oct 11 Javascript
javascript管中窥豹 形参与实参浅析
Dec 17 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 Javascript
老生常谈ES6中的类
Jul 31 Javascript
js实现全选反选不选功能代码详解
Apr 24 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 Javascript
layui实现显示数据表格、搜索和修改功能示例
Jun 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
很实用的一个完整email发送程序
2006/10/09 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP 命名空间实例说明
2011/01/27 PHP
php检测文件编码的方法示例
2014/04/25 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
JS继承用法实例分析
2015/02/05 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
express.js中间件说明详解
2019/03/19 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
python字符串连接的N种方式总结
2014/09/17 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
解决python replace函数替换无效问题
2020/01/18 Python
tensorflow 模型权重导出实例
2020/01/24 Python
建议书怎么写
2014/03/12 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
建筑学专业自荐书
2014/07/09 职场文书
股东协议书范本2016
2016/03/21 职场文书