jQuery模擬原生態(tài)App上拉刷新下拉加載更多頁面及原理
很多App中,新聞或者展示類都存在下拉刷新和上拉加載的效果,網(wǎng)上提供了實現(xiàn)這種效果的第三方類(詳情請見MJRefresh和EGOTableViewPullRefresh),用起來很方便,但是閑暇之余,我們可以思考下,這種效果實現(xiàn)的原理是什么,我以前說過,只要是動畫都是騙人的,只要不是硬件問題大部分效果都能在系統(tǒng)UI的基礎上做出來.
下面通過jQuery手機端上拉下拉刷新頁面代碼,很像QQ空間客戶端或者微信下拉刷新頁面特效代碼。
請看下面效果圖:

html代碼:
<div id="wrapper">
<ul>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
<li>row </li>
</ul>
</div>
<script>
for (var i = ; i < document.querySelectorAll("#wrapper ul li").length; i++) {
document.querySelectorAll("#wrapper ul li")[i].colorfulBg();
}
refresher.init({
id: "wrapper",//<------------------------------------------------------------------------------------┐
pullDownAction: Refresh,
pullUpAction: Load
});
var generatedCount = ;
function Refresh() {
setTimeout(function () { // <-- Simulate network congestion, remove setTimeout from production!
var el, li, i;
el = document.querySelector("#wrapper ul");
el.innerHTML = '';
for (i = ; i < ; i++) {
li = document.createElement('li');
li.appendChild(document.createTextNode('async row ' + (++generatedCount)));
el.insertBefore(li, el.childNodes[]);
}
wrapper.refresh();/****remember to refresh after action completed! ---yourId.refresh(); ----| ****/
for (var i = ; i < document.querySelectorAll("#wrapper ul li").length; i++) {
document.querySelectorAll("#wrapper ul li")[i].colorfulBg();
}
}, );
}
function Load() {
setTimeout(function () {// <-- Simulate network congestion, remove setTimeout from production!
var el, li, i;
el = document.querySelector("#wrapper ul");
for (i = ; i < ; i++) {
li = document.createElement('li');
li.appendChild(document.createTextNode('async row ' + (++generatedCount)));
el.appendChild(li, el.childNodes[]);
}
wrapper.refresh();/****remember to refresh after action completed!?。?---id.refresh(); --- ****/
for (var i = ; i < document.querySelectorAll("#wrapper ul li").length; i++) {
document.querySelectorAll("#wrapper ul li")[i].colorfulBg();
}
}, );
}
</script>
下拉刷新和上拉加載更多原理詳解,具體介紹通過代碼分析。
代碼如下:
// 下拉刷新的原理
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < - 100) {
[UIView animateWithDuration:1.0 animations:^{
// frame發(fā)生偏移,距離頂部150的距離(可自行設定)
self.tableView.contentInset = UIEdgeInsetsMake(150.0f, 0.0f, 0.0f, 0.0f);
} completion:^(BOOL finished) {
/**
* 發(fā)起網(wǎng)絡請求,請求刷新數(shù)據(jù)
*/
}];
}
}
// 上拉加載的原理
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"%f",scrollView.contentOffset.y);
NSLog(@"%f",scrollView.frame.size.height);
NSLog(@"%f",scrollView.contentSize.height);
/**
* 關鍵-->
* scrollView一開始并不存在偏移量,但是會設定contentSize的大小,所以contentSize.height永遠都會比contentOffset.y高一個手機屏幕的
* 高度;上拉加載的效果就是每次滑動到底部時,再往上拉的時候請求更多,那個時候產(chǎn)生的偏移量,就能讓contentOffset.y + 手機屏幕尺寸高大于這
* 個滾動視圖的contentSize.height
*/
if (scrollView.contentOffset.y + scrollView.frame.size.height >= scrollView.contentSize.height) {
NSLog(@"%d %s",__LINE__,__FUNCTION__);
[UIView commitAnimations];
[UIView animateWithDuration:1.0 animations:^{
// frame發(fā)生的偏移量,距離底部往上提高60(可自行設定)
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 60, 0);
} completion:^(BOOL finished) {
/**
* 發(fā)起網(wǎng)絡請求,請求加載更多數(shù)據(jù)
* 然后在數(shù)據(jù)請求回來的時候,將contentInset改為(0,0,0,0)
*/
}];
}
}
以上內容就是本文針對jQuery模擬原生態(tài)App上拉刷新下拉加載更多頁面及原理詳解,希望對大家有所幫助。
相關文章
Easyui Datagrid自定義按鈕列(最后面的操作列)
做項目的時候因為需求,要在表格的最后添加一列操作列,easyUI貌似沒有提供這種功能,下面我們來自定義按鈕列,具體實現(xiàn)代碼,大家參考下本文吧2017-07-07
淺談jQuery hover(over, out)事件函數(shù)
下面小編就為大家?guī)硪黄獪\談jQuery hover(over, out)事件函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦2016-12-12
jQuery教程 $()包裝函數(shù)來實現(xiàn)數(shù)組元素分頁效果
最近一周在做中文站搜索禮品widget的需求,這個需求中有一個分頁的功能2013-08-08
使用jquery獲取url以及jquery獲取url參數(shù)的實現(xiàn)方法
下面小編就為大家?guī)硪黄褂胘query獲取url以及jquery獲取url參數(shù)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05
jQuery 中$(this).index與$.each的使用指南
這篇文章主要介紹了jQuery 中$(this).index與$.each的使用方法,以及使用環(huán)境,有需要的小伙伴自己參考下吧2014-11-11
jquery點擊頁面任何區(qū)域實現(xiàn)鼠標焦點十字效果
鼠標點擊聚焦,地圖定位,在圖片上突出顯示,焦點定位頁面元素,這些都是在系統(tǒng)開發(fā)是經(jīng)常需要用到的,下面為大家介紹下具體的實現(xiàn),感興趣的朋友可以參考下哈2013-06-06

