原生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实现给出的盒子的序列是否可连为一矩型
Aug 30 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
Jun 02 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
面试常见的js算法题
Mar 23 Javascript
js实现页面多个日期时间倒计时效果
Jun 20 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
Vue接口封装的完整步骤记录
May 14 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
2006/12/14 PHP
一个PHP分页类的代码
2011/05/18 PHP
php学习笔记之基础知识
2014/11/08 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
vue-router传参用法详解
2019/01/19 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
Python获取服务器信息的最简单实现方法
2015/03/05 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python去掉空白行的多种实现代码
2018/03/19 Python
python实现大转盘抽奖效果
2019/01/22 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
企业行政文员岗位职责
2013/12/03 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
大学生心理活动总结
2014/07/04 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
个人债务授权委托书
2014/10/17 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL