iscroll.js的上拉下拉刷新時(shí)無法回彈的解決方法
使用過iscroll.js的上拉下拉刷新效果的朋友應(yīng)該都碰到過這個(gè)問題:在iOS的瀏覽器中,上拉或下拉刷新時(shí),當(dāng)手指劃出屏幕后,頁面無法彈回。很多人因?yàn)榻鉀Q不了這個(gè)問題,干脆就那樣不解決了,還有的直接就不用HTML了,使用原生代替HTML頁面。
相信很多朋友也有自己的解決辦法,只是沒寫出來,所以網(wǎng)上都搜不到解決方案。在很多QQ群里面也有很多人在問該怎么解決這個(gè)問題,所以我寫這篇文章記錄一下我的解決方案,希望對(duì)一些朋友有所幫助。
上拉下拉刷新的主要代碼:
myScroll = new iScroll('wrapper', {
vScrollbar: false,
useTransition: true,
topOffset: pullDownOffset,
onRefresh: function () {
if (pullDownEl.className.match('loading')) {
pullDownEl.className = '';
pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Pull down to refresh...';
} else if (pullUpEl.className.match('loading')) {
pullUpEl.className = '';
pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
}
},
onScrollMove: function () {
if (this.y > 5 && !pullDownEl.className.match('flip')) {
pullDownEl.className = 'flip';
pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Release to refresh...';
this.minScrollY = 0;
} else if (this.y < 5 && pullDownEl.className.match('flip')) {
pullDownEl.className = '';
pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Pull down to refresh...';
this.minScrollY = -pullDownOffset;
} else if (this.y < (this.maxScrollY - 5) && !pullUpEl.className.match('flip')) {
pullUpEl.className = 'flip';
pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Release to refresh...';
this.maxScrollY = this.maxScrollY;
} else if (this.y > (this.maxScrollY + 5) && pullUpEl.className.match('flip')) {
pullUpEl.className = '';
pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
this.maxScrollY = pullUpOffset;
}
},
onScrollEnd: function () {
if (pullDownEl.className.match('flip')) {
pullDownEl.className = 'loading';
pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Loading...';
pullDownAction();
} else if (pullUpEl.className.match('flip')) {
pullUpEl.className = 'loading';
pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Loading...';
pullUpAction();
}
}
});
頁面無法彈回的原因在于:手指劃出屏幕后touchend事件無法觸發(fā),回彈動(dòng)畫就無法執(zhí)行。解決辦法就是:當(dāng)手指接近屏幕邊緣的時(shí)候,手動(dòng)觸發(fā)動(dòng)畫方法。
在onScrollMove方法中插入判斷代碼:
onScrollMove: function () {
if((this.y < this.maxScrollY) && (this.pointY < 1)){
this.scrollTo(0, this.maxScrollY, 400);
return;
} else if (this.y > 0 && (this.pointY > window.innerHeight - 1)) {
this.scrollTo(0, 0, 400);
return;
}
......
}
下面解釋一下這段代碼的意思。
this.y是頁面已經(jīng)滾動(dòng)的垂直距離,this.maxScrollY是最大垂直滾動(dòng)距離,this.pointY手指當(dāng)前的垂直坐標(biāo)。
當(dāng)this.y < this.maxScrollY,就是已經(jīng)處于上拉的過程,當(dāng)(this.y < this.maxScrollY) && (this.pointY < 1)時(shí),處于上拉且手指已經(jīng)觸及屏幕邊緣,這時(shí)候手動(dòng)觸發(fā)this.scrollTo(0, this.maxScrollY, 400),頁面就開始回彈。
下拉過程也可以同理分析。
- 基于iscroll.js實(shí)現(xiàn)下拉刷新和上拉加載效果
- 純javascript實(shí)現(xiàn)簡(jiǎn)單下拉刷新功能
- vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)
- vue.js整合vux中的上拉加載下拉刷新實(shí)例教程
- Javascript下拉刷新的簡(jiǎn)單實(shí)現(xiàn)
- JS 插件dropload下拉刷新、上拉加載使用小結(jié)
- dropload.js插件下拉刷新和上拉加載使用詳解
- js仿手機(jī)頁面文件下拉刷新效果
- JS+CSS實(shí)現(xiàn)下拉刷新/上拉加載插件
- 原生js仿寫手機(jī)端下拉刷新
相關(guān)文章
可以用來調(diào)試JavaScript錯(cuò)誤的解決方案
我們?cè)跁鴮慾s的過程中,經(jīng)常會(huì)出現(xiàn)一些js錯(cuò)誤,對(duì)于如果找出錯(cuò)誤的解決方法就是關(guān)鍵,下面的文章就是相關(guān)的調(diào)試方法。2010-08-08
微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序
最近在寫小程序過程中遇到一個(gè)拖拽排序需求,上網(wǎng)一頓搜索未果,遂自行實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序的相關(guān)資料,需要的朋友可以參考下2022-03-03
純 JS 實(shí)現(xiàn)放大縮小拖拽功能(完整代碼)
這篇文章主要介紹了純js實(shí)現(xiàn)放大縮小拖拽功能,文中給大家提到了在開發(fā)過程中遇到的一些問題及解決方法,需要的朋友可以參考下2019-11-11
Bootstrap教程JS插件彈出框?qū)W習(xí)筆記分享
這篇文章主要為大家分享了Bootstrap教程JS插件彈出框?qū)W習(xí)筆記,為大家詳細(xì)介紹Bootstrap彈出框的使用方法,感興趣的小伙伴們可以參考一下2016-05-05
JavaScript通過元素的ID和name設(shè)置樣式
這篇文章主要介紹了JavaScript通過元素的ID和name設(shè)置其樣式,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以測(cè)試下2014-07-07
JS監(jiān)聽滾動(dòng)和id自動(dòng)定位滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了JS監(jiān)聽滾動(dòng)和id自動(dòng)定位滾動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
javascript下漢字和Unicode編碼互轉(zhuǎn)代碼
這個(gè)是就是把漢字和Unicode編碼互轉(zhuǎn)的javascript代碼,也是從網(wǎng)上找到了,也許有人用得著??!2010-10-10

