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 相关文章推荐
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
详解React中setState回调函数
Jun 14 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
JavaScript判断浏览器版本的方法
Nov 03 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
php和nginx交互实例讲解
2019/09/24 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
Javascript 继承机制实例
2009/08/12 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue视频播放暂停代码
2019/11/08 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
使用TensorFlow实现SVM
2018/09/06 Python
django query模块
2019/04/20 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
如何写python的配置文件
2020/06/07 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
写一个方法1000的阶乘
2012/11/21 面试题
付款委托书范本
2014/04/04 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
客房服务员岗位职责
2015/02/09 职场文书
开学典礼致辞
2015/07/29 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python