HTML5实现签到 功能


Posted in HTML / CSS onOctober 09, 2018

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(截图)

HTML5实现签到 功能

HTML5实现签到 功能

一些关键的地方

这个功能的编写思路是,先构建日期和签到相关数据,然后从服务端获取数据,并对原有数据进行更改,最后进行渲染。

这样子很好的摆脱了逻辑比较凌乱的问题,并且可以直接将这些数据用 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
 

HTML / CSS 相关文章推荐
CSS3中的注音对齐属性ruby-align用法指南
Jul 01 HTML / CSS
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
May 07 HTML / CSS
CSS3常用的几种颜色渐变模式总结
Nov 18 HTML / CSS
纯css3实现思维导图样式示例
Nov 01 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
Nov 10 HTML / CSS
html5时钟实现代码
Oct 22 HTML / CSS
HTML5新增的表单元素和属性实例解析
Jul 07 HTML / CSS
html5使用canvas绘制太阳系效果
Dec 15 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
Nov 27 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
Jan 27 HTML / CSS
通过feDisplacementMap和feImage实现水波特效
Apr 24 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
Oct 08 #HTML / CSS
移动端html5模拟长按事件的实现方法
Sep 30 #HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 #HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
Sep 19 #HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 #HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
Sep 17 #HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
Sep 17 #HTML / CSS
You might like
一个用php实现的获取URL信息的类
2007/01/02 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python中的tcp示例详解
2018/12/09 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
python实现图像全景拼接
2020/03/27 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
新闻学毕业生自荐信
2013/11/15 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
环保倡议书300字
2014/05/15 职场文书
小组名称和口号
2014/06/09 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
青少年法制教育心得体会
2016/01/14 职场文书