基于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实现运行代码需要刷新的解决方法
Aug 18 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
Jun 20 Javascript
js对象的复制继承实例
Jan 10 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
vue2项目使用sass的示例代码
Jun 28 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
Sep 12 Javascript
React中使用外部样式的3种方式(小结)
May 28 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 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/12/21 PHP
php数组编码转换示例详解
2014/03/11 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
python中import reload __import__的区别详解
2017/10/16 Python
简单了解Python中的几种函数
2017/11/03 Python
django模板结构优化的方法
2019/02/28 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
业绩考核岗位职责
2014/02/01 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
大学专科求职信
2014/07/02 职场文书
运动会报道稿300字
2014/10/02 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
警用民用对讲机找不同
2022/02/18 无线电