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 相关文章推荐
效率高的Javscript字符串替换函数的benchmark
Aug 02 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
getElementById().innerHTML与getElementById().value的区别
Oct 27 Javascript
vue.js指令v-model使用方法
Mar 20 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 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强制下载类型的实现代码
2011/04/21 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
详解Python的Lambda函数与排序
2016/10/25 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
详解python datetime模块
2020/08/17 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
中专生自我鉴定
2013/12/17 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
vue首次渲染全过程
2021/04/21 Vue.js