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 相关文章推荐
use jscript with List Proxy Server Information
Jun 11 Javascript
Javascript 生成指定范围数值随机数
Jan 09 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
Nov 07 Javascript
JavaScript 设计模式 安全沙箱模式
Sep 24 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
javascript修改图片src的方法
Jan 27 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
underscore之function_动力节点Java学院整理
Jul 11 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
微信小程序 转发功能的实现
Aug 04 Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
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
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
php数组键值用法实例分析
2015/02/27 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
移动端js图片查看器
2016/11/17 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
React 组件间的通信示例
2018/06/14 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
关键字throw与throws的用法差异
2016/11/22 面试题
经济信息系毕业生自荐信范文
2014/03/15 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库