javascript实现考勤日历功能


Posted in Javascript onNovember 29, 2018

简介

用过一些开源的日历,但对于自定义去绑定数据在日历元素中却不是很方便,由于工作需要用到考勤日历,考虑到日历的实现也不是特别麻烦,于是自己弄了一个,样式比较简单,需要的可以自己去扩展。使用的时候绑定获取数据的方法即可,在这个日历中我没有直接添加选择月份。各位有兴趣可以自己扩展,已预留设置日期的方法。自定义去扩展的时候注意保证原有的代码结构不变,增加一些方法即可,下面直接上源码了,就三个文件。

attendanceCalendar.js

代码已更新多次,请直接上github下载,链接

修复 第一行日期数量计算 bug,修改了以下的方法

function initCalendarBody() {
  $content = document.createElement("div");
  addClass($content, "div_calendar_body");
  $elem.appendChild($content);
  addCalendarHead();

  //日期计算bug,例:2017-01
  var num = 0;
  do {
   var length = 0;
   if (num == 0) {
    //出星期天外,星期数(1~6)和第一行显示的日期数(7~2),相加的结果都为8
    length = firstWeekDay == 0 ? 1 : 8 - firstWeekDay;
    num = length;
    createLine(length - 1, 1);
   }
   else {
    var length = mds - num > 6 ? 7 : mds - num;
    num = num + length;
    createLine(length - 1);
   }
  }
  while (num < mds)
  showCurrentDate();
 }

 function createLine(num, type) {
  var newDiv = document.createElement("div");
  for (var i = 0; i <= num; i++, index++) {
   var span = document.createElement("span");
   var span_text = document.createTextNode(index + 1);
   //单个日期元素的操作
   if (attendances && attendances.length > 0) {
    bindAttendance(span, attendances[index]);
   }
   span.appendChild(span_text);
   newDiv.appendChild(span);
  }
  if (type == 1) {
   addClass(newDiv, "first_div")
  }
  else {
   addClass(newDiv, "last_div")
  }
  $content.appendChild(newDiv);
 }

css部分,日期元素主要用了三种颜色表示

.div_calendar {
 width: 450px;
 margin: 0 auto;
 text-align: center;
 display: -webkit-box;
}

/** 日历标题 */
.div_calendar_title {
 width: 450px;
 margin: 0 auto;
 text-align: center;
}

/** 日历主体 */
.div_calendar_body {
 width: 350px;
 text-align: center;
}

/** 日元素 */
.div_calendar span {
 width: 50px;
 display: inline-block;
 text-align: center;
 line-height: 50px;
}

/** 正常 */
.div_calendar span.normal {
 color: blue;
}

/** 迟到 */
.div_calendar span.late {
 color: red;
}

/** 缺勤 */
.div_calendar span.absense {
 color: #666;
}

/** 缺勤 */
.div_calendar span.today {
 border-radius: 50%;
 background: cornflowerblue;
}

/** 日历第一行日期 */
.div_calendar .first_div {
 text-align: right;
}

/** 日历末行日期 */
.div_calendar .last_div {
 text-align: left;
}

/** 日期显示div */
.div_calendar .div_currentDate {
 text-align: right;
}

.div_calendar .changeDate {
 cursor: pointer;
}

.div_calendar .div_currentDate span {
 width: inherit;
}

.div_calendar .div_currentDate span em {
 margin: 5px;
}

calendar.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="div_calendar_title"><h1>自定义日历</h1></div>
<div id="calendar_div" class="div_calendar">
</div>
<script src="script/attendanceCalendar.js"></script>
</body>
</html>

示例演示:

javascript实现考勤日历功能

代码已更新多次,请直接上github下载,链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 常见学习网站与参考书
Nov 09 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
Dec 17 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
Nov 14 Javascript
vue 实现websocket发送消息并实时接收消息
Dec 09 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
JavaScript console的使用方法实例分析
Apr 28 Javascript
OpenLayer学习之自定义测量控件
Sep 28 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
vsCode安装使用教程和插件安装方法
Aug 24 #Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 #Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 #Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 #Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 #Javascript
vue实现双向绑定和依赖收集遇到的坑
Nov 29 #Javascript
js中this的指向问题归纳总结
Nov 28 #Javascript
You might like
德劲1102收音机的打理维修案例
2021/03/02 无线电
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
脚本收藏iframe
2006/07/21 Javascript
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
python判断设备是否联网的方法
2018/06/29 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
Python图像读写方法对比
2020/11/16 Python
五种Python转义表示法
2020/11/27 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
客户表扬信范文
2014/01/10 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
网络宣传方案
2014/03/15 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
病假证明模板
2015/06/19 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL