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,所以很多高大上的東西都沒用到,不過自己親自動手也發現了一些問題,所以給大家分享出來