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学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
javascript中mouseover、mouseout使用详解
Jul 19 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
Nov 06 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
Dec 03 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 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 各种排序算法实现代码
2009/08/20 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
粗略分析Python中的内存泄漏
2015/04/23 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
python删除服务器文件代码示例
2018/02/09 Python
学Python 3的理由和必要性
2019/11/19 Python
Python类反射机制使用实例解析
2019/12/30 Python
python如何构建mock接口服务
2021/01/28 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
运动会通讯稿400字
2014/01/28 职场文书
创业资金计划书
2014/02/06 职场文书
上班看电影检讨书
2014/02/12 职场文书
歌唱比赛主持词
2014/03/18 职场文书
家长对老师的评语
2014/04/18 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
质量标语大全
2014/06/12 职场文书
依法行政工作汇报
2014/10/28 职场文书
离婚案件上诉状
2015/05/23 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android