基于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 相关文章推荐
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
从0到1搭建Element的后台框架的方法步骤
Apr 10 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 Javascript
你知道JavaScript Symbol类型怎么用吗
Jan 08 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
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
关于php中一些字符串总结
2016/05/05 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python操作excel的方法
2018/08/16 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
python装饰器原理与用法深入详解
2019/12/19 Python
python中的unittest框架实例详解
2021/02/05 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
专科毕业生自我鉴定
2013/12/01 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
python基础之模块的导入
2021/10/24 Python