H5邀请好友PK答题

之前花2周做了一个答题PK的H5页面项目,不是小程序,只是H5页面。时间安排:5天搭建页面和补充动画顺便等后台开发出接口,1天套页面接口,5天测试改bug。其中测试改bug的时候,很多细节点还是蛮多的,现在项目上线就整理下思路。

页面展示

a.jpg

页面逻辑

页面首先获取用户信息接口根据cookie判断登录,接着分【自动匹配】(和机器人对玩)和【向好友发起挑战】(发送游戏链接给好友)两条答题路线。
自动匹配请求接口1s轮询一次等待;请求成功获取机器人的答题信息存入数组,进入答题页面;开始答题获取题目接口,10s倒计时期间提交答案判断是否正确;答题结束请求答题结果接口展示对战结果。
邀请好友答题创建游戏房间链接复制粘贴给好友(游戏房间带上邀请者id和时间戳),1s1次轮询房间状态;对手点击链接请求加入房间接口;开始答题获取题目接口,请求成功进入10s倒计时答题开始;每s请求检查对手的答题情况展示得分;5题对战结束,展示得分秒数结果。

页面代码

  1. 图片预加载
img_list =['images/a0.jpg','images/a1btn1.png','images/a1btn2.png','images/a1p0.png','images/a1p1.png','images/a1p2.png','images/a1p3.png','images/tc.png','images/a2p1.png','images/a3p1.png','images/a1.jpg',"images/a2.jpg"];
        document.addEventListener('DOMContentLoaded', imgLoader(img_list,loadProcess), false);       
        /*图片预加载*/
        function loadImage(path,callback){
          var img=new Image();
            img.onload=function(){
              img.onload=null;
              callback();
            }
          img.src=path;
        }
        function imgLoader(sources,callback){
          var len=img_list.length,
              count=0;
          while(img_list.length){
            loadImage(img_list.shift(),function(){
              callback(++count,len,hideLoading);
            })
          }
        }
        /*加载进度*/
        function loadProcess(count,len,callback){
            var percent=Math.round((count)/len*100),
            now=document.querySelector('#loading span'),
            i=num=now.innerHTML,
            timer;
            timer=setInterval(function(){ 
                var nowpro =++num;
                now.innerHTML = nowpro; 
                if(num>=percent){
                    clearInterval(timer);
                }
                if(count>=len&&num>=percent){
                    callback();
                }
            },140);
        }
        function hideLoading(){
            //加载页隐藏正页内容出现
            document.getElementById('loading').style.display ='none';
            document.getElementById('wrap').style.display ='block'; 
            
        }
  1. js点击按钮复制链接
    a.png

    用了一个插件clipboard.js
    百度云盘下载clipboard.min.js文件
<div class="adress" id="adress">http://www1.pcbaby.com.cn/zt/sh20180604/beiyinmei/index.html</div>
<input class="urlcofy" type="button" ></input>

var clipboard2 =new ClipboardJS('.urlcofy', {
    target: function() {
    return document.getElementById("adress");
      }
  });
function copyUrl(){
    clipboard2.on('success', function(e) {
      alert("链接复制成功!");
      e.clearSelection();
      $('.urlcofy').unbind("click");
    });
  clipboard2.on('error', function(e) {
      alert("复制没有成功,请手动复制内容!");
  });
}

$(".urlcofy").bind("click",function(){
    copyUrl();
})
  1. 页面嵌入滚动条
    用了插件iscroll.js,引入js和css。
    iscroll.js下载
    scrollbar.css下载
//html部分
<div id="scroller1" class="scroller ">
    <ul class="ranktotal">
              XXX滚动条内容
        </ul>
</div>
 //js部分
 function preventDefault(e) { e.preventDefault(); };  
            var myScroll1 = new iScroll('scollwrap1',{
                        scrollbarClass: 'myScrollbar',
                        hideScrollbar:false,
                        bindToWrapper:true,
                        checkDOMChanges: true,
                        onBeforeScrollStart: function () {
                                                        //滚动条滚动的时候阻止超出屏幕高的长页面本身的滚动
                            document.addEventListener('touchmove',preventDefault,false)
                        },
                        onScrollEnd: function () {
                                   document.removeEventListener('touchmove', preventDefault, false);  
                                }
              });
  1. 获取url中"?"符后的字符串并正则匹配
function GetQueryString(){
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配
            var context = "";
            if (r != null)
                context = r[2];
            reg = null;
            r = null;
            return context == null || context == "" || context == "undefined" ? "" : context;
}
  1. 限制字符长度
function cutstr(str, len) {
    var str_length = 0;
    var str_len = 0;
    str_cut = new String();
    str_len = str.length;
    for (var i = 0; i < str_len; i++) {
        a = str.charAt(i);
        str_length++;
        if (escape(a).length > 4) {
            //中文字符的长度经编码之后大于4  
            str_length++;
        }
        str_cut = str_cut.concat(a);
        if (str_length >= len) {
            str_cut = str_cut.concat("...");
            return str_cut;
        }
    }
    //如果给定字符串小于指定长度,则返回源字符串;  
    if (str_length < len) {
        return str;
    }
}   
  1. 监听用户是否按返回离开页面
document.addEventListener("visibilitychange", function(){
            if (document.hidden) {
                // document.title="用户离开了a" 
            }else{
                // document.title="用户回来了b";
            }
        })
  1. 整个页面源码(接口文档也放进去了,接口现在下线失效了,仅供参考)
    链接: https://pan.baidu.com/s/1EI8KNkbdE9FfuBUF07jXJw 密码: kve7
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 前端组件库 搭建web app常用的样式/组件等收集列表(移动优先) 8. 路由和链接(Routing And U...
    guanguans阅读 2,595评论 0 17
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,754评论 0 15
  • Mobile Web Favorites 参与贡献 移动前端开发收藏夹,欢迎使用Issues以及 Pull Req...
    柴东啊阅读 730评论 0 2
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11
  • 问答题1 /72浏览器页面有哪三层构成,分别是什么,作用是什么?参考答案构成:结构层、表示层、行为层分别是:HTM...
    _Yfling阅读 1,217评论 0 23