H5 签到功能
程序员文章站
2023-02-08 10:29:19
Introduce(介绍) 用户签到的H5例子(css+jquery,无图片),由于网上找的的用户签到例子都不好,要不就是好多图片组成的,要不就大量冗余代码,所以特意做了个签到界面(移动端)。 User sign sample page for mobile using h5 which only ......
introduce(介绍)
用户签到的h5例子(css+jquery,无图片),由于网上找的的用户签到例子都不好,要不就是好多图片组成的,要不就大量冗余代码,所以特意做了个签到界面(移动端)。
user sign sample page for mobile using h5 which only use css + jquery + html.
demo
https://fallstar0.github.io/signsample/
shot(截图)
一些关键的地方
这个功能的编写思路是,先构建日期和签到相关数据,然后从服务端获取数据,并对原有数据进行更改,最后进行渲染。
这样子很好的摆脱了逻辑比较凌乱的问题,并且可以直接将这些数据用 vue.js 来挂载(本文没有这样做)。
生成日期数据
//生成日期数据 function builddata() { var da = { dates: [],//日期数据,从1号开始 current: '',//当前日期 monthfirst: 1,//获取当月的1日等于星期几 month: 0,//当前月份 days: 30,//当前月份共有多少天 day: 0,//今天几号了 issigned: false,//今天是否已经签到 signlastdays:3,//连续签到日子 signtoday: function () { this.issigned = true; this.dates[this.day].issigned = true; }, }; var ds = []; //初始化日期数据 var dt = new date(); da.current = dt.tostring('yyyy年m月d日'); da.monthfirst = new date(dt.getfullyear(), dt.getmonth(), 1).getday(); da.month = dt.getmonth() + 1; da.days = new date(dt.getfullyear(), parseint(da.month), 0).getdate();//获取当前月的天数 da.day = dt.getdate(); for (var i = 1; i < da.days + 1; i++) { var o = { issigned: false,//是否签到了 num: i,//日期 istoday: i == da.day,//是否今天 ispass: i < da.day,//时间已过去 }; ds[i] = o; } da.dates = ds; return da; }
有了数据之后,就可以将数据转换为界面了
//渲染数据 function renderdata(da) { var signdays = document.getelementbyid('spsigndays'); signdays.innertext = da.signlastdays; var root = document.getelementbyid("signtable"); root.innerhtml = ''; var tr, td; var st = da.monthfirst; var dates = da.dates; var rowcount = 0; //最多6行 for (var i = 0; i < 42; i++) { if (i % 7 == 0) { //如果没有日期了,中断 if (i > (st + da.days)) break; tr = document.createelement('tr'); tr.classname = 'darkcolor trb'; root.appendchild(tr); rowcount++; } //前面或后面的空白 if (i < st || !dates[i - st + 1]) { td = document.createelement('td'); td.innerhtml = '<div class="sign-blank"><span></span></div>'; tr.appendchild(td); continue; } //填充数字部分 var d = dates[i - st + 1]; td = document.createelement('td'); var tdcss = ''; if (d.istoday) tdcss = 'sign-today'; else if (d.ispass) tdcss = 'sign-pass'; else tdcss = 'sign-future'; if (d.issigned) { tdcss = 'sign-signed ' + tdcss; td.innerhtml = '<div class="' + tdcss + '"><span>' + d.num + '</span><svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="sign-pin svg-triangle "><polygon points="0,0 35,0 0,35" /></svg></div>'; } else { tdcss = 'sign-unsign ' + tdcss; td.innerhtml = '<div class="' + tdcss + '"><span>' + d.num + '</span></div>'; } tr.appendchild(td); } //计算是否需要添加最后一行 if ((st + da.days + 1) / 7 > rowcount) root.appendchild(tr); }
//构建日期数据 var da = builddata(); //渲染 renderdata(da);
copyright
author fallstar0@qq.com
https://github.com/fallstar0/signsample
https://gitee.com/fallstar/signsample
转载的时候请保留作者和原文信息!
上一篇: 如果演义中荆州没丢,刘备能不能统一三国?
下一篇: 微信小程序实现验证码获取倒计时效果