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 相关文章推荐
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
Nov 18 Javascript
jQuery实现密保互斥问题解决方案
Aug 16 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
javascript实现的闭包简单实例
Jul 17 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
原生js实现回复评论功能
Jan 18 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
Jun 23 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 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
PHP抽象类基本用法示例
2018/12/28 PHP
PHP 实现链式操作
2021/03/09 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python解析最简单的验证码
2016/01/07 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python中time tzset()函数实例用法
2021/02/18 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
类的核心特性有哪些
2014/01/01 面试题
枚举与#define宏的区别
2014/04/30 面试题
三八妇女节超市活动方案
2014/08/18 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2019入党申请书格式
2019/06/25 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
js作用域及作用域链工作引擎
2022/07/07 Javascript