原生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 相关文章推荐
js实现的map方法示例代码
Jan 13 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 Javascript
JavaScript多并发问题如何处理
Oct 28 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
Sep 20 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 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
基于initPHP的框架介绍
2013/04/18 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python 格式化输出百分号的方法
2019/01/20 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
求职信写作要突出重点
2014/01/01 职场文书
解除财产保全担保书
2014/05/20 职场文书
护校行动方案
2014/05/31 职场文书
项目负责人任命书
2014/06/04 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
房屋租房协议书范本
2014/12/04 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS