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两段代码,两个小技巧
Feb 04 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
Mar 06 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
Mar 17 Javascript
webpack配置文件和常用配置项介绍
Apr 28 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
解决vue项目使用font-awesome,build后路径的问题
Sep 01 Javascript
详解Vue的sync修饰符
May 15 Vue.js
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 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
JS实现放烟花效果
2020/03/10 Javascript
python读取注册表中值的方法
2013/04/08 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
python如何建立全零数组
2020/07/19 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
国际书籍零售商:Wordery
2017/11/01 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
信用卡工资证明范本
2014/10/17 职场文书
先进单位申报材料
2014/12/25 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
MYSQL常用函数介绍
2022/05/05 MySQL