美文网首页
移动端微信H5活动项目总结

移动端微信H5活动项目总结

作者: 潘千千 | 来源:发表于2018-06-22 11:44 被阅读0次
    前言:移动端微信H5活动项目进入提测阶段,正好有时间写个项目总结,避免下次再踩进这些坑,半天爬不出来,抓心挠肺还浪费时间。如果有哪位大侠觉得我这个坑正好帮你填上了,还请高抬贵指点个赞。给点赞的大侠们比个心,江湖路远,说不定以后还能帮你填坑呢是吧~~

    关键词:移动端微信h5页面,事件监听,发送短信倒计时,禁止蒙层下层页面滚动,后添加元素加事件,安卓不刷新页面加时间戳,ios300ms的延迟,ios点击闪屏,做个滚轮~~......

    正文:
    一、事件监听--input propertychange
      前提:在项目中遇到了这样一个很常见的问题:登录时,输入手机号,一旦手机号的输入有变动或者符合了某些规则,就执行接下来的逻辑。
      这个监听事件在pc端一般是使用“on change”,但是在移动端这个change事件不起作用的呀。上网查了下,发现:input 和 propertychange 一起用。为什么一起用,其实就像pc里面浏览器的兼容性。代码如下:

    $('.input').on('input propertychange', function(e){
            var input= $('.input').val();
            if(input!= ''){
                $('.code').removeClass('gray-code').addClass('color-code');
            }else{
                $('.code').removeClass('color-code').addClass('gray-code');
            }
        })
    

    二、发送短信倒计时
      前提:很多登录注册里面都有输入手机号,然后发送短信验证码这一项,这个短信验证码会有倒计时,多少秒之后重新发送。现在要说的就是这么一个效果:
      我感觉我废话连篇,为了给自己正名,直接看代码吧:

        var num = 60;
        function setTime() {
            if (num < 0) {
                $('.code').html("获取验证码");
                num = 60;
                //如果,此时的input里不是空,那么换成彩色的。
                if($('.input').val() != ''){
                    $('.code').removeClass('gray-code').addClass('color-code');
                }
                return false;
            } else {
                $('.code').html("重新发送" + num + "s");
                num--;
            }
            setTimeout(function() {
                setTime();
            },1000)
        }
    

      调用的时候,在你需要调用的地方加一个setTime()就好啦~~
    三、禁止蒙层下层页面滚动
      前提:手机页面会有很多弹框,有弹框就有半透明蒙层,往往会出现这样一个问题,在半透明蒙层上来回滑动时,下层页面也会滚动,这样就导致体验非常的不好。
      解决办法一
      这个是我用在本次项目中的用法,因为弹框里面只是单纯的点击,关闭,输入,并没有弹框里的滚动,所以,使用这种方法。

    $('.modal').bind("touchmove", function(e){
            e.preventDefault()
        }, false)
    

      解决办法二
      这个是我之前用在其他项目里的方法:
      打开蒙层时,给body或者最大的div添加样式:

    `overflow: hidden;`
    `height: 100%;`
    

      在某些机型下,你可能还需要给根节点添加样式:

    `overflow``:` `hidden``;`
    

      关闭蒙层时,移除以上样式。
      优点:简单方便,只需添加css样式,没有复杂的逻辑。
      缺点:我看网上有些博客写到移动端会不兼容,但是我当时用这种方法在公司的几个测试机上试过了,,都没有出现问题,也可能是机型少的缘故。
    四、后添加元素加事件---delegate
      前提:我之前以为jquery的on绑定是万能的,后来发现,面对ios9左右的版本,后添加上去的元素绑定点击事件都很痛苦的样子,,,明明写了on click。在eventlistener里面却是啥都没有。。。如果它能是人,我真的是不想说话,并向他扔巨大的一堆bug。。。

    $('.stage').delegate("li","click",function(e){})
    

    这里有两个需要注意的点:

    • 严格按照上面的格式写,$('.stage')里面的li加了点击事件。
    • ('.stage')也一定要是本来就存在于HTML里面的,要不然任你跳脚砸电脑,它依然没有任何反应。什么叫本来就存在与HTML页面里面的?就是说('.stage')不能是拼接后添加进去的元素,而是一开始搭建HTML结构时就写在里面的。看,像这样:
    <div class="price-result">
        <div class="time"></div>
        <div class="img">
            <div class="condition2 hide">
                <ul  class="stage">
                     //这里面是放进来后加的li
                </ul>
            </div> 
        </div>
    </div>
    

    五、安卓不刷新页面加时间戳
      前提:在安卓中,刷新当前页是不好使的,,,因为你就算刷烂了,他们也还是会自动把原来的缓存加载出来,什么window.location.href直接等于当前页啊,reload()方法啊,通通不好使,最好用的一个就是,加时间戳,让他一时反应不过来,把这段时间后给的URL当做一个新页面来重新请求。

    ...
    }else if(responseText.code === "9001"){
       var url = 'XX/XX/.html';
       window.location.href = url+'?time='+((new Date()).getTime());
    }
    

      这里有一个补充的经验点数~~,因为最近这个项目已经上线,刚开始进行兑奖,竟然在线上暴露出了一个问题,当时经过反复测试都没有发现,后来及时调整该页面现在称它为B页面,经过调整测试后,没有问题,上线。但是,第二天,运营方又提了B页面最开始的问题,他发消息:iPhone 6 p,微信6.7.1 ,app进去正常,微信进去还这样。注意是还,也就是这个手机之前出过这样的问题,现在改了bug发版后又出现了,但是其他都没有问题,稍微提一下,这个B页面更改的是ajax里拼接数据那一部分的,也就是说,只要更改bug后一个页面走成功了,其他页面都应该是没有问题了。那现在经过更改,这个安卓手机还是又出现问题了,那是什么原因?很简单,这是缓存问题,解决方法,只要在进入这个页面的时候,在URL上加上时间戳,那这个时间戳和上面的时间戳一样吗?刚开始我加的一模一样的时间戳,后来被老大提醒,换成另一种方式的时间戳:

    if (isLogin) {
        window.location.href = getURL.ActivDomain + "/jackpot.html?v=20180802";
    } 
    

    老大说,这种写法一般用在发版的时候,v代表version。后面的日期一般是什么时候发,就写的哪一天的日期。那为什么不按照newDate来写了呢?因为newDate可能会更耗用户的流量。
    六、ios300ms的延迟
      前提:就是点击的时候他并不能立即执行或者出现你想要的效果,在ios9.2版本最为明显,,,又是这个ios9.2,,,你们要是想知道具体的,就详情查看《ios的300ms点击延时问题》(https://blog.csdn.net/xiaohai1232/article/details/60469938)。
      后来翻了大部分博客,发现有说用css来解决的(单单加一个css能解决?我当时不信,后来因为懒,先试了这个,发现,嗯,事实证明,果真没啥用。。。),后来发现大部分博客都会推荐fastclick这个插件,嗯呐,肯定就好使呗。
      接下来,无非就是安装,下载或者npm都行,引入js,使用js :

    $(function(){
      fastclick.attach(document.body);
      .....
    })
    

    七、ios点击闪屏
      前提:嗯,你猜对了,还是这个ios9左右在这作妖,,,也不算是闪屏了,就是点击的时候,有时候会有一片阴影,,像个铺在最底下背景板的蒙层一样,难看极了。。。

    -webkit-tap-highlight-color: rgba(0,0,0,0);
    -webkit-tap-highlight-color:transparent;
    

    八、做个滚轮效果吧!
      前提:很多时候移动端的滚轮样式要随着设计来变化,让我们做个滚轮吧~:

    var ulScroll = {
            step:undefined,
            totalHeight:undefined,
            scrollHeight:undefined,
            init:function(obj){
                this.getSpanHeight(obj);
                this.bindEvents(obj);
            },
            getSpanHeight:function(obj){
                var scrollHeight = obj.height();
                var len = obj.siblings('ul').children().length;
                var totalHeight = parseInt(len * 0.8 * parseFloat($('html').css('font-size')));
                var per = (totalHeight - scrollHeight) / len;
                /*obj.children().height(per);*/
                this.step = per;
                this.totalHeight = totalHeight - scrollHeight;
                this.scrollHeight = scrollHeight - $(obj).find('span').height();
            },
            bindEvents:function(obj){
                var that = this;
                obj.siblings('ul').scroll(function(){
                    var target = obj.siblings('ul');
                    var scrollTop = target.scrollTop();
                    var top = scrollTop * that.scrollHeight / that.totalHeight ;
                    obj.children().css({
                        top: top +'px'
                    })
                })
            }
        }
    ulScroll.init($('.scroll'));//调用
    

    好不容易才整理出来,估计还有一些落下的,看看成果,嗯,还比较满意,叉会腰吧,可把我牛逼坏了,哈哈哈哈,整理不易,且看且珍惜,珍惜的人点个喜欢吧,嘻嘻嘻。

    相关文章

      网友评论

          本文标题:移动端微信H5活动项目总结

          本文链接:https://www.haomeiwen.com/subject/brrcyftx.html