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 相关文章推荐
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
JavaScript中的slice()方法使用详解
Jun 06 Javascript
基于Vue.js实现数字拼图游戏
Aug 02 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
在Vant的基础上封装下拉日期控件的代码示例
Dec 05 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
ES6箭头函数和扩展实例分析
May 23 Javascript
使用JavaScript获取Django模板指定键值数据
May 27 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 jQuery
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变量可用字符
2014/05/28 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
js null undefined 空区别说明
2010/06/13 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
Seajs的学习笔记
2014/03/04 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
JSONP跨域请求
2017/03/02 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
回调函数的意义以及python实现实例
2017/06/20 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
致百米运动员广播稿
2014/01/29 职场文书
工作会议主持词
2014/03/17 职场文书
大学专科求职信
2014/07/02 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
效能风暴心得体会
2014/09/04 职场文书
简历自荐信范文
2015/03/09 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
Java 死锁解决方案
2022/05/11 Java/Android