Jquery 插件iScroll 实现下拉刷新,上拉加载!

今天给大家带来的是H5的上拉加载和下拉刷新特效。仿的是原生app的样式,不过外观可能有点差别。

首先我们使用的是jq的iScroll插件来编写。

到官网下载即可:

https://github.com/cubiq/iscroll

下面是实现的运行效果:


上下拉动,刷新和加载

下面的是页面html代码,要符合iScroll 代码原则:

(代码放不进来,只能截图了)
html代码

下面就是关键的js代码了


var myScroll,pullDownEl,pullDownOffset,pullUpEl,pullUpOffset,generatedCount=0;

/**

*下拉刷新 (自定义实现此方法)

* myScroll.refresh();  //数据加载完成后,调用界面更新方法

*/

functionpullDownAction() {

  setTimeout(function() {

  var el, li, i;

  el=document.getElementById('ul');

  for(i=0;i<3;i++) {

     li=document.createElement('li');

    li.innerText='添加'+(++generatedCount);

    el.insertBefore(li,el.childNodes[0]);

}

myScroll.refresh();//数据加载完成后,调用界面更新方法Remember to refresh when contents are loaded (ie: on ajax completion)

},1000);// <-- Simulate network congestion, remove setTimeout from production!

}

/**

*滚动翻页 (自定义实现此方法)

* myScroll.refresh();  //数据加载完成后,调用界面更新方法

*/

functionpullUpAction() {

setTimeout(function() {// <-- Simulate network congestion, remove setTimeout from production!

varel,li,i;

el=document.getElementById('ul');

for(i=0;i<3;i++) {

li=document.createElement('li');

li.innerText='添加'+(++generatedCount);

el.appendChild(li,el.childNodes[0]);

}

myScroll.refresh();//数据加载完成后,调用界面更新方法Remember to refresh when contents are loaded (ie: on ajax completion)

},1000);// <-- Simulate network congestion, remove setTimeout from production!

}

/**

*初始化iScroll控件

*/

functionloaded() {

pullDownEl=document.getElementById('pullDown');

pullDownOffset=pullDownEl.offsetHeight;

pullUpEl=document.getElementById('pullUp');

pullUpOffset=pullUpEl.offsetHeight;

myScroll= newiScroll('app', {

scrollbarClass:'myScrollbar',/*重要样式*/

useTransition: false,/*此属性不知用意,本人从true改为false */

topOffset:pullDownOffset,

onRefresh: function() {

if(pullDownEl.className.match('loading')) {

pullDownEl.className='';

pullDownEl.querySelector('.pullDownLabel').innerHTML='下拉刷新...';

}else if(pullUpEl.className.match('loading')) {

pullUpEl.className='';

pullUpEl.querySelector('.pullUpLabel').innerHTML='上拉加载更多...';

}

},

onScrollMove: function() {

if(this.y>5&& !pullDownEl.className.match('flip')) {

pullDownEl.className='flip';

pullDownEl.querySelector('.pullDownLabel').innerHTML='松手开始更新...';

this.minScrollY=0;

}else if(this.y<5&&pullDownEl.className.match('flip')) {

pullDownEl.className='';

pullDownEl.querySelector('.pullDownLabel').innerHTML='下拉刷新...';

this.minScrollY= -pullDownOffset;

}else if(this.y<(this.maxScrollY-5)&& !pullUpEl.className.match('flip')) {

pullUpEl.className='flip';

pullUpEl.querySelector('.pullUpLabel').innerHTML='松手开始更新...';

this.maxScrollY= this.maxScrollY;

}else if(this.y>(this.maxScrollY+5)&&pullUpEl.className.match('flip')) {

pullUpEl.className='';

pullUpEl.querySelector('.pullUpLabel').innerHTML='上拉加载更多...';

this.maxScrollY=pullUpOffset;

}

},

onScrollEnd: function() {

if(pullDownEl.className.match('flip')) {

pullDownEl.className='loading';

pullDownEl.querySelector('.pullDownLabel').innerHTML='加载中...';

pullDownAction();// Execute custom function (ajax call?)

}else if(pullUpEl.className.match('flip')) {

pullUpEl.className='loading';

pullUpEl.querySelector('.pullUpLabel').innerHTML='加载中...';

pullUpAction();// Execute custom function (ajax call?)

}

}

});

setTimeout(function() {document.getElementById('app').style.left='0'; },800);

}

//初始化绑定iScroll控件

document.addEventListener('touchmove',function(e) {e.preventDefault(); },false);

document.addEventListener('DOMContentLoaded',loaded,false);

在这个代码实现后,仅仅能做到刷新和加载,如果想要模拟app里面的上拉刷新和下拉加载,我们还需要一点css3 的动画来实现

html,body{

width:100%;

height:100%;

}

body,ul,li{

padding:0;

margin:0;

border:0;

}

body{

font-size:12px;

-webkit-user-select:none;

-webkit-text-size-adjust:none;

font-family:helvetica;

}

#app{

position:absolute;z-index:1;

top:0px;bottom:50px;left:0;

width:100%;

background:#555;

overflow:auto;

}

#scroller{

position:relative;

/* -webkit-touch-callout:none;*/

-webkit-tap-highlight-color:rgba(0,0,0,0);

float:left;

width:100%;

padding:0;

}

#scroller ul{

position:relative;

list-style:none;

padding:0;

margin:0;

width:100%;

text-align:left;

}

#scroller li{

padding:0 10px;

height:40px;

line-height:40px;

border-bottom:1px solid#ccc;

border-top:1px solid#fff;

background-color:#fafafa;

font-size:14px;

}

#scroller li>a{

display:block;

}

/**

*

*下拉样式Pull down styles

*

*/

#pullDown,#pullUp{

background:#fff;

height:40px;

line-height:40px;

padding:5px10px;

border-bottom:1px solid#ccc;

font-weight:bold;

font-size:14px;

color:#888;

}

#pullDown.pullDownIcon,#pullUp.pullUpIcon{

display:block;float:left;

width:30px;height:30px;

background:url('img/pull-icon@2x.png')0 0no-repeat;

-webkit-background-size:30px60px;background-size:30px60px;

-webkit-transition-property:-webkit-transform;

-webkit-transition-duration:250ms;

}

#pullDown.pullDownIcon{

-webkit-transform:rotate(0deg)translateZ(0);

}

#pullUp.pullUpIcon{

-webkit-transform:rotate(-180deg)translateZ(0);

}

/**

*动画效果css3代码

*/

#pullDown.flip.pullDownIcon{

-webkit-transform:rotate(-180deg)translateZ(0);

}

#pullUp.flip.pullUpIcon{

-webkit-transform:rotate(0deg)translateZ(0);

}

#pullDown.loading.pullDownIcon,#pullUp.loading.pullUpIcon{

background-position:0 100%;

-webkit-transform:rotate(0deg)translateZ(0);

-webkit-transition-duration:0ms;

-webkit-animation-name:loading;

-webkit-animation-duration:2s;

-webkit-animation-iteration-count:infinite;

-webkit-animation-timing-function:linear;

}

@-webkit-keyframesloading{

from{-webkit-transform:rotate(0deg)translateZ(0); }

to{-webkit-transform:rotate(360deg)translateZ(0); }

}

以上代码就可以实现开始的gif动图中的内容,如果有问题,可以留言。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,812评论 0 1
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,046评论 1 10
  • 今天天气好晴朗处处好风光伴随着好天气的到来心情都更加明朗了呢是不是该学点烧脑的内容了呢傻球也要出来晒晒太阳咯~ C...
    Iris_mao阅读 605评论 0 2
  • 青山墨人阅读 282评论 5 6
  • 不敢不拼命,因为根本没有其他的路,这就是道只有一个选项的选择题,多么痛的领悟,领悟之后也只能忍着痛前行。 环望四周...
    辉狼_fish阅读 140评论 3 1