一直以来都有一个问题,在做移动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,好用是好用,但是坑也多,还得注意。也不知道什么时候才会静下心来读一下源码