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 相关文章推荐
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
一文了解Vue中的nextTick
May 06 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
JS回调函数 callback的理解与使用案例分析
Sep 09 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
Vue3如何理解ref toRef和toRefs的区别
Feb 18 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常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
php array_map()函数实例用法
2021/03/03 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
node.js express中app.param的用法详解
2017/07/16 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
法学毕业生自我鉴定
2014/01/31 职场文书
廉洁使者实施方案
2014/03/29 职场文书
倡议书格式范文
2014/04/14 职场文书
对教师的评语
2014/04/28 职场文书
博士生导师推荐信
2014/07/08 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
python游戏开发Pygame框架
2022/04/22 Python