原生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的with语句使用方法
Sep 21 Javascript
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
Javascript中this关键字的一些小知识
Mar 15 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
vue router demo详解
Oct 13 Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 Javascript
JS实现图片懒加载(lazyload)过程详解
Apr 02 Javascript
vue中三级导航的菜单权限控制
Mar 31 Vue.js
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初学者(入门学习经验谈)
2010/10/12 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
简述php环境搭建与配置
2016/12/05 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
网页自动跳转代码收集
2009/09/27 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
python 排序算法总结及实例详解
2016/09/28 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
一些Solaris面试题
2013/03/22 面试题
七一讲话心得体会
2014/09/05 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang