原生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调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
Mar 03 Javascript
jQuery获得document和window对象宽度和高度的方法
Mar 25 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
vuex actions传递多参数的处理方法
Sep 18 Javascript
详解vue中axios请求的封装
Apr 08 Javascript
浅谈Three.js截图并下载的大坑
Nov 01 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
JS实现图片切换特效
2019/12/23 Javascript
在Python中使用gRPC的方法示例
2018/08/08 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
python实现简单登陆系统
2018/10/18 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
经典的班主任推荐信
2013/10/28 职场文书
大学生个人事迹材料
2014/01/21 职场文书
婚前协议书怎么写
2014/04/15 职场文书
投标承诺函格式
2015/01/21 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
一个都不能少观后感
2015/06/04 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript