基于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 相关文章推荐
jQuery TextBox自动完成条
Jul 22 Javascript
javascript与CSS复习(三)
Jun 29 Javascript
javascript操作ul中li的方法
May 14 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
vue脚手架及vue-router基本使用
Apr 09 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
微信小程序列表时间戳转换实现过程解析
Oct 12 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 jquery 多文件上传简单实例
2013/12/23 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
PHP基本语法实例总结
2016/09/09 PHP
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
大学生社会实践方案
2014/05/11 职场文书
工程索赔意向书
2014/08/30 职场文书
朋友离别感言
2015/08/04 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
python神经网络编程之手写数字识别
2021/05/08 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android