成品的效果图

1.HTML文件


<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>中兴城-考勤信息</title>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<meta name="keywords" content="中兴城">
<meta name="description" content="中兴城">
<meta name="format-detection" content="telephone=no,email=no,adress=no">
<!-- 防止UC浏览器字体放大 -->
<meta name="wap-font-scale" content="no">
<!-- 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓 -->
<meta name="HandheldFriendly" content="true">
<!-- 微软的老式浏览器 -->
<meta name="MobileOptimized" content="320">
<!-- uc强制竖屏 -->
<meta name="screen-orientation" content="portrait">
<!-- QQ强制竖屏 -->
<meta name="x5-orientation" content="portrait">
<!-- UC强制全屏 -->
<meta name="full-screen" content="yes">
<!-- QQ强制全屏 -->
<meta name="x5-fullscreen" content="true">
<!-- UC应用模式 -->
<meta name="browsermode" content="application">
<!-- QQ应用模式 -->
<meta name="x5-page-mode" content="app">
<!-- windows phone 点击无高光 -->
<meta name="msapplication-tap-highlight" content="no">
<!-- 适应移动端end -->
<link href="https://cdn.bootcss.com/normalize/7.0.0/normalize.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/kaoqin.css">
<link rel="stylesheet" href="css/common.css">
</head> <body>
<!-- 主内容 -->
<div class="container">
<!-- 分类 -->
<div class="banner_kq">
<div class="control_">
<a href="javascript:;" class="preMonth"><img src="data:images/to_left_swiper_icon.png" alt=""></a>
<span class="date_">2017年12月</span>
<a href="javascript:;" class="nextMonth"><img src="data:images/to_right_swiper_icon.png" alt=""></a>
</div>
<div class="show_info">
<div class="flex">
<div class="item">
<div class="circle"><span></span>27</div>应出勤</div>
<div class="item">
<div class="circle"><span></span>26</div>实际出勤</div>
<div class="item">
<div class="circle"><span></span>2</div>迟到</div>
<div class="item">
<div class="circle"><span></span>1</div>早退</div>
</div>
</div>
</div>
<ul class="calendT">
<!-- late:迟到 error:早退 errorLate:迟到及早退 today: 今天-->
<li>
<span>周一</span>
<span>周二</span>
<span>周三</span>
<span>周四</span>
<span>周五</span>
<span>周六</span>
<span>周七</span>
</li>
</ul>
<ul class="calendC">
<li>
<span></span>
<span></span>
<span></span>
<span></span>
<span>1</span>
<span>2</span>
<span>3</span>
</li>
<li>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span class="late">8</span>
<span>9</span>
<span>10</span>
</li>
<li>
<span class="error">11</span>
<span>12</span>
<span class="today">13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
</li>
<li>
<span>18</span>
<span class="errorLate">19</span>
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
</li>
<li>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
</li>
<li>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</li>
</ul>
<div class="show_tips">
<span>今日</span><span>休息日</span><span>迟到/早退</span>
</div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="js/kaoqin.js"></script>
</body> </html>

2.CSS文件

ul {
list-style: none;
padding: 0;
margin: 0;
background: #fff;
}
.calendT {}
.calendT li {
color: #999999;
font-size: .13rem;
text-align: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
line-height: .4rem;
border-bottom: 1px solid #eee;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.calendT li span{-webkit-box-flex: 1;-ms-flex-positive: 1;flex-grow: 1;}
.calendC {}
.calendC li {
text-align: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: .13rem;
color: #666666;
line-height: calc(100vw/7);
height: calc(100vw/7);
}
.calendC li span{
position: relative;
width: calc(100vw/7);
border-right: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.calendC li span:nth-child(6),
.calendC li span:nth-child(7){
background: #f3efdd;
}
.calendC span::before{
position: absolute;
top: .02rem;
left: .02rem;
line-height: 1;
}
.error,.late,.errorLate {
background:#ebb5b5;
}
.error::before {
content: "退";
font-size: .12rem;
color: #bf1515;
}
.late::before {
content: "迟";
font-size: .12rem;
color: #bf1515;
}
.errorLate::before {
content: "迟/退";
font-size: .12rem;
color: #bf1515;
position: absolute;
}
.today {
background: #ccd3f3;
}

3.js文件

function Dragon() {
this.init();
}
Dragon.prototype = {
nowDate: null,
showDate: new Date(),
init: function(date) {
var date = date || this.showDate;
var year = date.getFullYear() + "-" + ((date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : "0" + (date.getDate() + 1)) + "-" + ((date.getDate()) > 9 ? (date.getDate()) : "0" + (date.getDate()));
var currentDays = this.getMonthDays(date);
var prevDays = this.getPrevMonthDays();
var nextDays = this.getNextMonthDays();
var firstDay = currentDays.firstDay;
var indexRow = 0;
html = "<li>";
for (let i = 1; i < firstDay; i++) {
html += "<span></span>";
}
for (let i = 1; i <= currentDays.days; i++) {
html += "<span>" + i + "</span>";
if ((i + firstDay - 1) % 7 == 0) {
html += "</li><li>";
indexRow++;
}
}
if (indexRow == 4) {
var cols = 7 - (firstDay + currentDays.days - 1) % 7;
for (let i = 1; i <= cols; i++) {
html += "<span></span>";
}
html += "</li><li><span></span><span></span><span></span><span></span><span></span><span></span><span></span></li>";
}
if (indexRow == 5) {
var cols = 7 - (firstDay + currentDays.days - 1) % 7;
for (let i = 1; i <= cols; i++) {
html += "<span></span>";
}
html += "</li>";
}
document.querySelector(".calendC").innerHTML = html;
console.log(year);
},
getMonthDays: function(date, str) { //获取传入时间当前的月份有多少天(不传时间就是获取当前月份的天数)
var str = str === undefined ? 0 : str;
var date = date || new Date();
if (str == 0) {
this.showDate = date;
}
date.setDate(1);
var firstDay = date.getDay();
var monthStart = date.getTime();
date.setMonth(date.getMonth() + 1);
var monthEnd = date.getTime();
var obj = {};
var days = Math.ceil((monthEnd - monthStart) / (24 * 60 * 60 * 1000));
date.setMonth(date.getMonth() - 1)
obj = {
days: days,
firstDay: firstDay == 0 ? 7 : firstDay
}
return obj;
},
getCurrentMonthDays: function() { //获取当前月份的天数
var date = new Date();
if (this.nowDate == null) {
this.nowDate = date;
}
date.setDate(1);
var firstDay = date.getDay();
var monthStart = date.getTime();
date.setMonth(date.getMonth() + 1);
var monthEnd = date.getTime();
var obj = {};
var days = Math.ceil((monthEnd - monthStart) / (24 * 60 * 60 * 1000));
date.setMonth(date.getMonth() - 1);
obj = {
days: days,
firstDay: firstDay == 0 ? 7 : firstDay
}
return obj;
},
getNextMonthDays: function() { //获取下一个月的天数
var date = this.showDate;
date.setMonth(date.getMonth() + 1);
this.getMonthDays(date, 1);
date.setMonth(date.getMonth() - 1);
},
getPrevMonthDays: function() { //获取上一个月的天数
var date = this.showDate;
date.setMonth(date.getMonth() - 1);
this.getMonthDays(date, -1);
date.setMonth(date.getMonth() + 1);
},
nextMonth: function() { //显示下一个月的时间
var date = this.showDate;
date.setMonth(date.getMonth() + 1);
this.init(date);
},
prevMonth: function() { //显示上一个月的时间
var date = this.showDate;
date.setMonth(date.getMonth() - 1);
this.init(date);
}
}
var calend = new Dragon();
$(".preMonth").on("click", function() {
calend.prevMonth();
})
$(".nextMonth").on("click", function() {
calend.nextMonth();
})

纯js日历插件的更多相关文章

  1. js日历插件 中文、英文日历

    日历插件 来源网站:http://www.cnblogs.com/yank/archive/2008/08/14/1267746.html 六款英文日历 http://www.bobd.cn/desi ...

  2. JS日历插件 - My97 DatePicker用法详解

    一.简介 1. 注意事项 (1)My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名: (2)各目录及文件的用途: WdatePicker.js 配 ...

  3. My97DatePicker{js日历插件}

    VS自带了一个日历控件:Calendar,但是它有一个缺陷:即在选择,隐藏,显示的时候都会引起回传 Calendar控件的一些用法:    取值:Calendar1.SelectedDate.ToSh ...

  4. 纯js的统计图插件-统计图

    第一次写博客,写的不到望大家见谅! 今天给大家分享一个纯js的插件(统计图),有知道的可以在下面评论一起谈论一下,刚学着的时候,我是看了好久才看懂的一个基本结构,到后来我才知道原来直接去原网站上找到复 ...

  5. kPagination纯js实现分页插件

    kPagination分页插件 纯js分页插件,压缩版本~4kb,样式可以自定义 demo 使用方法 <div id="pagination"></div> ...

  6. 简洁js日历控件的使用

    往Web工程添加纯js日历控件 在网上找到了DatePicker.js(http://www.cnblogs.com/shenyixin/archive/2013/03/11/2954156.html ...

  7. baguetteBox.js响应式画廊插件(纯JS)

    baguetteBox.js baguetteBox.js 是一个简单和易于使用lightbox纯JavaScript脚本,拥有图像放大缩小并带有相应的CSS3过度,并能在触摸屏等设备上完美展示. D ...

  8. 纯js客服插件集qq、旺旺、skype、百度hi、msn

    原文 纯js客服插件集qq.旺旺.skype.百度hi.msn 客服插件,集qq.旺旺.skype.百度hi.msn 等 即时通讯工具,并可自己添加支持的通讯工具,极简主义,用法自己琢磨.我的博客 h ...

  9. jquery.jCal.js显示日历插件

    描述:日历插件jCal用于需要输入日期的表单文本框. 兼容浏览器:IE浏览器/Firefox/Google Chrome 官方链接: http://www.overset.com/2008/05/1 ...

随机推荐

  1. 【wp】HWS计划2021硬件安全冬令营线上选拔赛

    逆向手在夹缝中艰难求生系列. 这篇真的存粹是做题笔记了,对内核驱动啥的不太懂,pwn也不会,能做出来的题都是硬逆出来的( childre最后死活没整出来,后来看大佬的wp才知道对子进程有修改(.)呜呜 ...

  2. 用友GRP-u8 SQL注入

    POST /Proxy HTTP/1.1 Accept: Accept: */* Content-Type: application/x-www-form-urlencoded User-Agent: ...

  3. Asp.net core通过自定义特性实现双端数据验证的一些想法

    asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...

  4. 2019 ICPC 上海区域赛总结

    2019上海区域赛现场赛总结 补题情况(以下通过率为牛客提交): 题号 标题 已通过代码 通过率 我的状态 A Mr. Panda and Dominoes 点击查看 5/29 未通过 B Prefi ...

  5. Codeforces Round #690 (Div. 3)

    第一次 ak cf 的正式比赛,不正式的是寒假里 div4 的 Testing Round,好啦好啦不要问我为什么没有 ak div4 了,差一题差一题 =.= 不知不觉已经咕了一个月了2333. 比 ...

  6. Codeforces Round #646 (Div. 2) B. Subsequence Hate (思维,前缀和)

    题意:给你一个只含有\(0\)和\(1\)的字符串,每次操作可以将\(0\)改成\(1\)或\(1\)改成\(0\),问最少操作多少次,使得子序列中不含有\(010\)和\(101\). 题解:仔细想 ...

  7. Educational Codeforces Round 94 (Rated for Div. 2) A. String Similarity (构造水题)

    题意:给你一个长度为\(2*n-1\)的字符串\(s\),让你构造一个长度为\(n\)的字符串,使得构造的字符串中有相同位置的字符等于\(s[1..n],s[2..n+1],...,s[n,2n-1] ...

  8. Linux-平均负载指数

    目录 系统平均负载 什么是平均负载 平均负载多少合理 如何观察平均负载 平均负载和CPU的使用率的区别 平均负载分析 执行CPU密集型任务 执行I/O密集型任务 大量进程调度 关于平均负载的总结 系统 ...

  9. 网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读

    参考 http://prontosil.club/posts/c08799e1/ 一. 实验名称 企业环境渗透2 二. 实验目的 [实验描述] 操作机的操作系统是kali 进入系统后默认是命令行界面 ...

  10. bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...