一直以來都有一個問題,在做移動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,好用是好用,但是坑也多,還得注意。也不知道什么時候才會靜下心來讀一下源碼
