原生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 相关文章推荐
修改file按钮的默认样式实现代码
Apr 23 Javascript
jquery中子元素和后代元素的区别示例介绍
Apr 02 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
javascript动态控制服务器控件实例
Sep 05 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
动态加载js文件简单示例
Apr 21 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
May 18 Javascript
函数四种调用模式以及其中的this指向
Jan 16 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
微信小程序实现弹出菜单功能
Jun 12 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python使用xslt提取网页数据的方法
2018/02/23 Python
python实现扫描日志关键字的示例
2018/04/28 Python
python得到windows自启动列表的方法
2018/10/14 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
详解python中的lambda与sorted函数
2020/09/04 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
党员实事承诺书
2014/03/26 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
工作简历自我评价
2015/03/11 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书