iscroll.js實現手機端下拉刷新的一些bug


iscroll.js的安裝與引用

1.首先安裝isroll  http://iscrolljs.com/

2.項目中引入iscroll.js

3.在我們將要滑動的盒子外邊套一個id為wrapper的盒子(id名不做限制,官方默認取wrapper)

 

准備工作完成以后,進入我們的正題

基本dom結構如下,ul為我們將要滾動的區域

接下來實例一個iScroll:

里邊的兩個函數為iscroll自帶的兩個構造函數

onScrollMove為滑動過程,類似於touchMove , onScrollEnd為滑動結束,類似於touchend,里邊的代碼為我自己項目的需求

做到這一步,基本上大體的模板已經形成,然后就是我個人遇到的一些bug

這個時候 ul具有一個iscroll.js自帶的滑動效果,因為剛開始ul里邊沒有任何內容,所以我們手動添加一些內容,我用的是ajax請求的數據

 

 然后調用它,因為項目做得是一個下拉加載數據的分頁效果,所以我傳了一個page(注:ajax的調用一定要在iscroll實例之前

   因為第一次加載的是第一頁的數據,所以page默認值為1

然后這個時候問題出現了,如果你請求的數據較小的時候,ul的內容會按正常滾動,如果在請求的數據較大或者網絡有延遲的情況下,這個時候我們ul的內容只能滾動1屏

這個時候很頭疼,因為我看的別人做的是好着的,到我這里就出現了這個問題,我分析了一下,網上的例子大多是寫的死數據,而我這里是請求的數據,那么問題就應該是這這些請求的數據

然后我稍微的改了一下自己的代碼

 

 我把實例的iscroll對象放在$ajax數據請求完成函數里邊,發現ul里邊的內容可以正常滾動,原因就是在我們實例的時候,ajax數據可能還沒請求到,iscroll容器沒有一個具體的高度大小

剩下的就是處理上拉加載和下拉刷新,位置以及樣式根據自己項目的需求進行處理

上邊的都只是創建了一個容器,下邊的才是核心內容

 

 紅色箭頭標注的地方才是核心,this.maxScrollY和this.minScrollY是容器兩個邊界值

當我們當前的滾動的距離小於容器的下邊界     this.y < this.maxScrollY 讓加載的動畫顯示,isTrue的作用是onScrollMove告訴onScrollend我現在做的是向上拉

 

然后在onScrollend 去做對應的處理,然后 selectData(page)再次去請求數據,實現數據的分頁加載,然后下拉刷新的邏輯一樣...自己腦補

到這里你們認為沒有問題了?那你就大錯特錯了,沒這么容易的,這個時候會出現一個問題,當我們第一次加載的數據不滿一屏時,maxScrollY的值有一些問題,導致我們的上拉加載不起作用,所以這個時候我加了一個判斷

 

 就是當我們的數據滿一屏時(this.maxScrollY < 0   ==  下邊臨界點 < 0),才去上拉加載數據,不滿一屏時,不去做任何處理,這個時候基本上就大功告成了,然后剩下的就是一個細節的處理,js的加載,css的樣式問題

 

然后總結一下,就是第一次用,而且還是iscroll4,也不是最新的iscroll5,所以很多高大上的東西都沒用到,不過自己親自動手也發現了一些問題,所以給大家分享出來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM