原生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 相关文章推荐
javascript中取前n天日期的两种方法分享
Jan 26 Javascript
Javascript实现禁止输入中文或英文的例子
Dec 09 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
深入理解JavaScript内置函数
Jun 03 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
vue下history模式刷新后404错误解决方法
Aug 18 Javascript
jQuery zTree树插件的使用教程
Aug 16 jQuery
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
实现vuex与组件data之间的数据同步更新方式
Nov 12 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 归并排序 数组交集
2011/05/10 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
书法培训心得体会
2014/01/05 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
运动会稿件100字
2014/09/24 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
大队委员竞选稿
2015/11/20 职场文书
股东出资协议书
2016/03/21 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS