原生js实现日历效果


Posted in Javascript onMarch 02, 2020

本文实例为大家分享了js实现日历效果的具体代码,供大家参考,具体内容如下

html代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>日历插件</title>
 <link rel="stylesheet" href="./css/reset.css" >
 <link rel="stylesheet" href="./css/index.css" >
</head>
<body>
 <div class="show">
 <button id="pre">上月</button>
 <span id="showtime">2019-01</span>
 <button id="next">下月</button>
 </div>
 <div class="box" id="box">
 </div>
</body>
<script>
 // 获取本月第一天
 function getMonthDay(date){
 date=new Date(date.valueOf())
 date.setDate(1);
 return date
 }
 // 获取本月最后一天
 function getMonthLastDay(date){
 date=new Date(date.valueOf())
 date.setMonth(date.getMonth()+1);
 date.setDate(0);
 return date
 }
 //获取本月的时间对象集合
 function getMonth(date){
 var arr=[]
 // 获取本月第一天
 var _date=getMonthDay(date)
 // // 获取本月最后一天
 var dataLast=getMonthLastDay(date).getDate()
 arr.push(new Date(_date.valueOf()))
 // 处理本月第一天 到本月最后一天
 for(var i =1;i<dataLast;i++){
  _date.setDate(_date.getDate()+1)
  arr.push(new Date(_date.valueOf()))
 }
 // 向前补全,重置为本月一号
 _date=getMonthDay(date)
 var forln=_date.getDay()
 for(var i=0;i<forln;i++){
  _date.setDate(_date.getDate()-1)
  arr.unshift(new Date(_date.valueOf()))
 }
 // 向后补全,重置为本月最后一天
 _date=getMonthLastDay(date)
 forln=_date.getDay()
 for(var i=forln;i<6;i++){
  _date.setDate(_date.getDate()+1)
  arr.push(new Date(_date.valueOf()))
 }
 return arr
 }
 // 将集合渲染到页面
 function renderTable(monthDateArr,date){
 document.getElementById("showtime").innerHTML=`${date.getFullYear()}-${date.getMonth()+1}`
 var table=document.createElement('table')
 var trTh=document.createElement('tr')
 trTh.innerHTML=`
  <th>周日</th>
  <th>周一</th>
  <th>周二</th>
  <th>周三</th>
  <th>周四</th>
  <th>周五</th>
  <th>周六</th>
 `
 table.appendChild(trTh)
 var tr=document.createElement('tr')
 for(let i in monthDateArr){
  var td=document.createElement('td')
  td.innerHTML=monthDateArr[i].getDate()
  tr.appendChild(td)
  if((i*1+1)%7===0){
  table.appendChild(tr)
  tr=document.createElement('tr')
  }else if(i == monthDateArr.length-1){
  table.appendChild(tr)
  }
 }
 document.getElementById("box").innerHTML=table.outerHTML
 }
 var date=new Date()
 document.getElementById('pre').onclick=function(){
 date.setDate(1)
 date.setMonth(date.getMonth()-1)
 renderTable(getMonth(date),date)
 }
 document.getElementById('next').onclick=function(){
 date.setDate(1)
 date.setMonth(date.getMonth()+1)
 rrenderTable(getMonth(date),date)
 }
 renderTable(getMonth(date),date)
 
</script>
</html>

css代码

.box{
 width: 700px;
 margin: 0 auto;
 box-sizing: border-box;
 padding: 0 1px;
}
table{
 width: 100%;
}
th,td{
 width:100px;
 text-align: center;
}
th{
 height: 30px;
 line-height: 30px;
 background: #e0e5e5;
}
td{
 height: 70px;
 line-height: 70px;
 background: #f3f5f5;
}
.show{
 display: flex;
 align-items: center;
 justify-content: center;
}

更多精彩内容请点击专题《javascript日历插件使用方法汇总》进行学习

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

Javascript 相关文章推荐
juqery 学习之三 选择器 可见性 元素属性
Nov 25 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 Javascript
jquery ajax post提交数据乱码
Nov 05 Javascript
JQuery中使用ajax传输超大数据的解决方法
Jul 14 Javascript
jQuery的几个我们必须了解的特点
May 03 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 Javascript
BootStrap modal实现拖拽功能
Dec 01 Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
vue实现标签云效果的示例
Nov 09 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 #Javascript
详解Vue中的Props与Data细微差别
Mar 02 #Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 #Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 #Javascript
vue学习笔记之slot插槽用法实例分析
Feb 29 #Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 #Javascript
Vue组件化开发之通用型弹出框的实现
Feb 28 #Javascript
You might like
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
matplotlib简介,安装和简单实例代码
2017/12/26 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Python 支付整合开发包的实现
2019/01/23 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
python numpy存取文件的方式
2020/04/01 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
韩国11街:11STREET
2018/03/27 全球购物
C语言基础笔试题
2013/04/27 面试题
华为慧通面试题
2012/09/11 面试题
应届生船舶驾驶求职信
2013/10/19 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
幼儿教师培训感言
2014/03/08 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
给学校建议书范文
2014/05/13 职场文书
大学生心理活动总结
2014/07/04 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
MySQL 数据类型详情
2021/11/11 MySQL
深入理解go缓存库freecache的使用
2022/02/15 Golang