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的ajax jsonp的使用解惑
Oct 09 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
Aug 24 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
Jan 16 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
javascript前端实现多视频上传
Dec 13 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 七大优势分析
2009/06/23 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
Javascript学习指南
2014/12/01 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
jquery实现企业定位式导航效果
2018/01/01 jQuery
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
pyqt4教程之widget使用示例分享
2014/03/07 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
django url到views参数传递的实例
2019/07/19 Python
python GUI模拟实现计算器
2020/06/22 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
2015新学期开学寄语
2015/02/26 职场文书
师范生见习自我总结
2015/06/23 职场文书