JS实现简易日历效果


Posted in Javascript onJanuary 25, 2021

本文实例为大家分享了JS实现简易日历效果的具体代码,供大家参考,具体内容如下

JS实现简易日历效果

JS实现简易日历效果

css

* {
  margin: 0;
  padding: 0;
  list-style: none;
 }

 #box {
  width: 280px;
  height: 360px;
  margin: 50px auto;
  background-color: black;
  color: aliceblue;
  line-height: 40px;
 }

 #header {
  height: 40px;
  color: aliceblue;
  line-height: 40px;
 }

 #header span {
  float: left;
  text-align: center;
  margin-top: 10px;
  line-height: 40px;
 }

 #prev,
 #next {
  width: 20%;
  line-height: 40px;
  cursor: pointer;
 }

 #current {
  width: 60%;
  line-height: 40px;
 }

 #week li {
  width: 40px;
  text-align: center;
  float: left;
  line-height: 40px;
 }

 #content li {
  width: 40px;
  text-align: center;
  float: left;
  line-height: 40px;
}

html

<div id="box">
 <div id="header">
  <span id="prev">上</span>
  <span id="current"></span>
  <span id="next">下</span>
 </div>
 <ul id="week">
  <li>日</li>
  <li>一</li>
  <li>二</li>
  <li>三</li>
  <li>四</li>
  <li>五</li>
  <li>六</li>
 </ul>
 <ul id="content">
  <!-- <li>31</li>
    <li>1</li>
    <li>2</li> -->
 </ul>
</div>```

js

var current = document.querySelector('#current');//月份name
 var prev = document.querySelector('#prev'); // 上个月
 var next = document.querySelector('#next'); // 下个月
 var content = document.querySelector('#content'); // 日期内容

 // 上个月要显示的天数
 // 求出本月第一天是星期几
 // 求出上个月最大的天数 把日期设为0
 function getPrevDays(date) {
  var date = new Date(date);
  // 把日期设为第一天,为了获取第一天是星期几
  date.setDate(1);
  var week = date.getDay();
  // 把日期设为0,为了得到上个月的最后一天
  date.setDate(0);
  var maxDay = date.getDate();
  var list = [];
  // 遍历红色日期的范围 push进数组
  for (var i = maxDay - week + 1; i <= maxDay; i++) {
  list.push(i);
  }
  return list;
 }


 // 求本月的天数
 // 月份推到下个月
 // 日期设为0
 function getNowDays(date) {
  var date = new Date(date);
  date.setMonth(date.getMonth() + 1);
  date.setDate(0);
  var maxDay = date.getDate();
  // console.log(maxDay)
  var list = [];
  // 
  for (var i = 1; i <= maxDay; i++) {
  list.push(i)
  }
  return list;
 }



 // 下个月要显示的天数
 function getNextDays(prevDays, nowDays) {
  var list = [];
  // 一页日历42天,42 - 上月天数 - 这个月天数 = 最后显示剩余的下个月天数
  for (var i = 1; i <= 42 - prevDays - nowDays; i++) {
  list.push(i)
  }
  return list
 }

 var x = 1;
 // 封装输出日期内容
 // x记录点击月份 根据月份 上面数组自动获取当月要显示的时间
 function output(x) {
  arr1 = getPrevDays('2021-' + x);
  arr2 = getNowDays('2021-' + x);
  arr3 = getNextDays(arr1.length, arr2.length);
  // console.log(arr2);
  var res = '';
  for (var i = 0; i < arr1.length; i++) {
  res += '<li style="color:red;">';
  res += arr1[i];
  res += '</li>';
  }

  for (var i = 0; i < arr2.length; i++) {
  res += '<li>';
  res += arr2[i];
  res += '</li>';
  }

  for (var i = 0; i < arr3.length; i++) {
  res += '<li style="color:red;">';
  res += arr3[i];
  res += '</li>';
  }
  // 三个数组输出结果拼接起来 输出
  return content.innerHTML = res;
 }




 // 输出月份显示
 var date = new Date();
 current.innerHTML = showMonth(new Date());
 // 月份
 function showMonth(date) {
  var date = new Date(date);
  date.setMonth(date.getMonth());
  var mon = date.getMonth();
  // var year = date.getFullyear();
  return (mon + 1) + '月';
 }

 output(x);
 // 下个月
 next.onclick = function () {
  x++;
  // console.log(x);
  if (x > 12) {
  x = 1;
  output(x);
  } else {
  current.innerHTML = showMonth('2021-' + x);
  output(x);
  }
 }

 // 上个月
 prev.onclick = function () {
  x--;
  console.log(x);
  if (x < 1) {
  x = 12;
  current.innerHTML = showMonth('2021-' + x);
  output(x);
  } else {
  current.innerHTML = showMonth('2021-' + x);
  output(x);
  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript入门教程(11) js事件处理
Jan 31 Javascript
js变量以及其作用域详解
Jul 18 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 Javascript
学好js,这些js函数概念一定要知道【推荐】
Jan 19 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
Aug 17 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
May 09 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 Javascript
javascript代码实现简易计算器
Jan 25 #Javascript
js简单粗暴的发布订阅示例代码
Jan 23 #Javascript
JS中循环遍历数组的四种方式总结
Jan 23 #Javascript
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
原生js实现自定义难度的扫雷游戏
Jan 22 #Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 #Javascript
js canvas实现五子棋小游戏
Jan 22 #Javascript
You might like
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
iOS10推送通知开发教程
2016/09/19 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
详解Javascript动态操作CSS
2014/12/08 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
python爬虫常用的模块分析
2014/08/29 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
python修改字典键(key)的方法
2019/08/05 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
环保志愿者活动方案
2014/08/14 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
股份合作协议书
2014/09/10 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers