第一次使用isScroll.js遇到的问题

  一直以来都有一个问题,在做移动app的时候页面中部分内容滑动总是有问题,有时候可以很流畅的滑动,有时候就像僵住了一样,怎么样都滑不动,这种情况在华为手机上出现的最多,有时候正常,大多时候不正常。我刚开始布局就是计算出要滑动的那部分内容在页面中的高度,然后如果里面的内容超过就overflow:scroll。但是问题就是出现在这里,刚开始是真的没有头绪,因为看起来很正常。然后百度到说加一句代码-webkit-overflow-scrolling: touch;就可以解决问题,但是这时候我已经尝试另外的方法了,所以这个我也没有验证是否可靠。

  然后我是用了一个移动端插件isScroll.js,这是专门做移动端滑动事件的,因为从没接触过,所以也是懵,贴上一个简易学习的网址:http://www.360doc.com/content/14/0724/11/16276861_396699901.shtml,容易上手。在这里我简单写一下要注意的问题,第一就是一定要给滑动部分的那个wrapper盒子一个高度,然后就是使用了isScroll以后会自动把输入框那些东西禁掉了,即不能输入,copy上我的代码。我刚开始是这样写的:

  

$(document).ready(function(){
            var allHeight = parseInt(document.documentElement.clientHeight);
            var headHeight = parseInt($('#header').css("height"));
            //isScroll容器样式设置
            $("#wrapper").css({
                 'position':'initial',
                 'height':allHeight-headHeight-220,
                 'overflow':'hidden'
            });
            var myscroll;
            function loaded(){
                setTimeout(function(){
                    myscroll=new iScroll("wrapper",{
                        hscrollbar:false,
                        vscrollbar:false,
                        hscroll:false,
                        vscroll:true,
                        momentum:false,
                        snap:true,
                        preventDefault:false,
                        checkDOMChanges:true,
                        mouseWheel:true, //侦听鼠标滚轮事件
                        //重写这个方法,因为isScroll让输入框禁用了
                        onBeforeScrollStart: function (e) { 
                            var target = e.target; 
                            while (target.nodeType != 1) target = target.parentNode; 
                            if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') 
                                e.preventDefault(); 
                            }
                    });
                },100 );
            }
            
            window.addEventListener("load",loaded,false);
            myscroll.refresh();
           
            document.addEventListener('touchmove', function (e) {e.preventDefault(); }, false);
        });        

       当然,这时候还是有问题,在手机上测试的时候不分手机类型的都不能滑动,因为不了解isScroll,所以不知道从哪里开始找,后来找测bug的同学给我找,结果他一百度就出来了,我也是比较无语,其实我是百度过的,但是不知道怎么说需求,所以不能精确的找出答案。

  百度告诉我只要把最后一行代码,即document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);这一句注释掉就好了,因为这是对全局的移动事件进行阻止默认事件,如果在外层有这个事件,那你插件里面怎么改可能都没用,所以不管我怎么改isScroll里面的参数都是不行的。

  在这里先记录下来遇到的问题,以后在做项目的时候再继续探讨isScroll,好用是好用,但是坑也多,还得注意。也不知道什么时候才会静下心来读一下源码

 

  

posted @ 2017-04-24 17:43  红枣味酸奶  阅读(2940)  评论(1编辑  收藏  举报