基于JavaScript实现每日签到打卡轨迹功能


Posted in Javascript onNovember 29, 2018

本文实例为大家分享了js实现每日签到打卡轨迹功能的具体代码,供大家参考,具体内容如下

1. 核心文件 calendar.js 

var calUtil = {
 //当前日历显示的年份
 showYear:2018,
 //当前日历显示的月份
 showMonth:1,
 //当前日历显示的天数
 showDays:1,
 eventName:"load",
 //初始化日历
 init:function(signList){
  calUtil.setMonthAndDay();
  calUtil.draw(signList);
  
 },
 draw:function(signList){
  //绑定日历
  var str = calUtil.drawCal(calUtil.showYear,calUtil.showMonth,signList);
  $("#calendar").html(str);
  //绑定日历表头
  var calendarName=calUtil.showYear+"年"+calUtil.showMonth+"月";
  $(".calendar_month_span").html(calendarName); 
 },
 //获取当前选择的年月
 setMonthAndDay:function(){
  switch(calUtil.eventName)
  {
   case "load":
    var current = new Date();
    calUtil.showYear=current.getFullYear();
    calUtil.showMonth=current.getMonth() + 1;
    break;
   case "prev":
    var nowMonth=$(".calendar_month_span").html().split("年")[1].split("月")[0];
    calUtil.showMonth=parseInt(nowMonth)-1;
    if(calUtil.showMonth==0)
    {
      calUtil.showMonth=12;
      calUtil.showYear-=1;
    }
    break;
   case "next":
    var nowMonth=$(".calendar_month_span").html().split("年")[1].split("月")[0];
    calUtil.showMonth=parseInt(nowMonth)+1;
    if(calUtil.showMonth==13)
    {
      calUtil.showMonth=1;
      calUtil.showYear+=1;
    }
    break;
  }
 },
 getDaysInmonth : function(iMonth, iYear){
  var dPrevDate = new Date(iYear, iMonth, 0);
  return dPrevDate.getDate();
 },
 bulidCal : function(iYear, iMonth) {
  var aMonth = new Array();
  aMonth[0] = new Array(7);
  aMonth[1] = new Array(7);
  aMonth[2] = new Array(7);
  aMonth[3] = new Array(7);
  aMonth[4] = new Array(7);
  aMonth[5] = new Array(7);
  aMonth[6] = new Array(7);
  var dCalDate = new Date(iYear, iMonth - 1, 1);
  var iDayOfFirst = dCalDate.getDay();
  var iDaysInMonth = calUtil.getDaysInmonth(iMonth, iYear);
  var iVarDate = 1;
  var d, w;
  aMonth[0][0] = "日";
  aMonth[0][1] = "一";
  aMonth[0][2] = "二";
  aMonth[0][3] = "三";
  aMonth[0][4] = "四";
  aMonth[0][5] = "五";
  aMonth[0][6] = "六";
  for (d = iDayOfFirst; d < 7; d++) {
  aMonth[1][d] = iVarDate;
  iVarDate++;
  }
  for (w = 2; w < 7; w++) {
  for (d = 0; d < 7; d++) {
   if (iVarDate <= iDaysInMonth) {
   aMonth[w][d] = iVarDate;
   iVarDate++;
   }
  }
  }
  return aMonth;
 },
 ifHasSigned : function(signList,day){
  var signed = false;
  $.each(signList,function(index,item){
  if(item.signDay == day) {
   signed = true;
   return false;
  }
  });
  return signed ;
 },
 drawCal : function(iYear, iMonth ,signList) {
  var myMonth = calUtil.bulidCal(iYear, iMonth);
  var htmls = new Array();
  htmls.push("<div class='sign_main' id='sign_layer'>");
  htmls.push("<div class='sign_succ_calendar_title'>");
  htmls.push("<div class='calendar_month_span'></div>");
  htmls.push("</div>");
  htmls.push("<div class='sign' id='sign_cal'>");
  htmls.push("<table>");
  var d, w;
  for (w = 1; w < 7; w++) {
  htmls.push("<tr>");
  for (d = 0; d < 7; d++) {
   var ifHasSigned = calUtil.ifHasSigned(signList,myMonth[w][d]);
   console.log(ifHasSigned);
   if(ifHasSigned){
   htmls.push("<td class='on'>" + (!isNaN(myMonth[w][d]) ? myMonth[w][d] : " ") + "</td>");
   } else {
   htmls.push("<td>" + (!isNaN(myMonth[w][d]) ? myMonth[w][d] : " ") + "</td>");
   }
  }
  htmls.push("</tr>");
  }
  htmls.push("</table>");
  htmls.push("</div>");
  htmls.push("</div>");
  return htmls.join('');
 }
};

2. 页面Js引入

<script src="jquery.min.js"></script>
<script src="~calendar.js"></script>

3.0 后台拉取会员已经签到的打卡轨迹,填充到表格中去。 

var signList=[{"signDay":"23"},{"signDay":"24"},{"signDay":"25"},{"signDay":"26"},{"signDay":"30"}]; 
//填充到日历表格中
calUtil.init(signList);

4. 效果图

 基于JavaScript实现每日签到打卡轨迹功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript获取地址栏参数
Dec 22 Javascript
js 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
使用jquery动态加载Js文件和Css文件
Oct 24 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
Jun 13 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
Jan 04 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 #Javascript
js canvas实现二维码和图片合成的海报
Nov 19 #Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 #Javascript
js实现每日签到功能
Nov 29 #Javascript
Vue.js的复用组件开发流程完整记录
Nov 29 #Javascript
javascript实现考勤日历功能
Nov 29 #Javascript
vsCode安装使用教程和插件安装方法
Aug 24 #Javascript
You might like
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
办公室主任职责范文
2013/11/08 职场文书
医学专业大学生求职的自我评价
2013/11/27 职场文书
医院护士专业个人的求职信
2013/12/09 职场文书
旅游市场营销方案
2014/03/09 职场文书
给校长的一封建议书
2014/03/12 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
文明寝室标语
2014/06/13 职场文书
学校交通安全责任书
2014/08/25 职场文书
异地年检委托书范本
2014/09/24 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL