H5 签到功能

原文:H5 签到功能

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 [email protected]

https://github.com/FallStar0/SignSample

https://gitee.com/fallstar/SignSample

转载的时候请保留作者和原文信息!

原文地址:https://www.cnblogs.com/lonelyxmas/p/11318589.html

时间: 2024-11-07 15:55:11

H5 签到功能的相关文章

java签到功能

原文:java签到功能 源代码下载地址:http://www.zuidaima.com/share/1550463784176640.htm spring+springMVC+hibernate框架 简单的登陆验证 签到的主要处理在于签到历史的显示 测试账号test 密码test 插件路径在readme里 截图:    

欧美斯项目签到功能,实时获取当前所在位置的经纬度

由于欧美斯项目需要签到功能,因此需要给后台传一个当前位置的经纬度,以下是获取经纬度的方法 1>导入CoreLocation.frameWork 2>引入头文件,并遵循协议 #import <CoreLocation/CoreLocation.h> <CLLocationManagerDelegate> 3>代码 @interface YYAboutUsViewController ()<UIWebViewDelegate,CLLocationManagerD

商城签到功能的设计与实现

需求分析        1.用户当天登录商城,只要签到就直接奖励一定的积分或者根据用户本周或者本月内已经连续签到的天数进行积分奖励,后台可以设置具体的奖励规则,这里假设本周内连续登录三天奖励 1 积分,五天奖励 2 积分,七天奖励 3 积分,每周一签到次数归零(归零方法不一定是每周一签到次数自动设为零,详见下文) 2.实现形式:在个人中心放置签到按钮或者登录成功之后进行弹窗提示 3.个人中心,用户可以看到签到日志(如果设置日志记录的话)和积分流水 4.商城后台可以对签到送积分的规则进行设置,也可

php实现签到功能

首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态 在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了. 通过时间戳的判断,及时更新状态表,并且当可以签到的时候则对用户积分表进行操作,即更新用户积分. 具体代码

微信公众号聊天室 H5私聊功能开发 带推送提醒功能

微聊聊天室是专门针对微信公众号.H5开发的一款聊天室, 可群发计划.私聊, 群房间数无限制, 部署在您自己的服务器上, 有需要的联系我 qq: 445899710 微信 hype522147 下图是俩功能 1. 点击头像和用户私聊 2. 点击顶部联系管理菜单, 主动与客服管理私聊 效果图预览 原文地址:https://www.cnblogs.com/ccjin/p/11361114.html

PHP+MYSQL+AJAX实现每日签到功能

一.web前端及ajax部分 文件index.html <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>PHP+AJAX+MYSQL实现每日签到</title> <script type="text/javascript" src="js/jquery.min.js&q

简易微信小程序签到功能

一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期的数据,如下图 三.后端 后端写两个接口,一个用于查询用户今日是否签到和签到记录总数,一个用于添加用户签到信息到数据库.这里用的是python的flask框架. (1)查询用户签到信息接口: @app.route('/get_sign/<user_id>') def get_sign(user_id): try: data=get_sign_info(user_id) exc

NopCommerce 4.2 之微信小程序 - 每日签到功能

/// <summary> /// 调用接口自动签到,并返回签到结果 /// </summary> /// <returns></returns> [Route("index")] [APIFilter(true, true)] public APIResult<object> index() { //设置为驼峰命名(即将实体全部首字母小写处理) var serializerSettings = new JsonSeriali

基于Redis bitmap实现签到功能

作者:zhanhailiang 日期:2014-12-21 需求场景 Bitmap 对于一些特定类型的计算非常有效. 假设现在我们希望记录自己网站上的用户的上线频率,比如说,计算用户A上线了多少天,用户B上 线了多少天,诸如此类,以此作为数据,从而决定让哪些用户参加beta测试等活动--这个模式可以使 用SETBIT和BITCOUNT来实现. 比如说,每当用户在某一天上线的时候,我们就使用SETBIT,以用户名作为key,将那天所代表的网站 的上线日作为offset 参数,并将这个offset