java h5 上拉加载更多_H5页面基于iScroll.js插件实现下拉刷新,上拉加载更多

本文介绍了如何利用iScroll.js插件在H5页面中实现下拉刷新和上拉加载更多的交互效果。详细讲解了HTML、CSS和JavaScript的实现代码,并提供了插件的使用方法和示例。
摘要由CSDN通过智能技术生成

前言

在我之前的项目中,页面总是干巴巴的,用户的体验不是特别完美,我也是一直觉得把设计师给到的psd做出来就好,很少考虑用户的感受。我喜欢看不同的App,操作每个步骤,观赏每个能和我互动的交互设计效果,我很喜欢。感觉有回应。

现在开始实现我页面的第一个交互效果,让我的页面更生动一点。

实现的插件

基于iScroll.js插件

代码

html

我是头部固定
下拉刷新
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
  • 我是小公举
上拉加载更多
我是底部固定

css

*{margin:0;padding:0}

body{font-size:12px}

li{list-style:none}

.header{position:absolute;top:0;left:0;width:100%;height:45px;line-height:45px;text-align:center;color:#333;font-size:16px}

.footer{position:absolute;bottom:0;left:0;width:100%;height:45px;line-height:45px;text-align:center;color:#333;font-size:16px}

#wrapper{position:absolute;top:45px;left:0;bottom:48px;width:100%;}

#wrapper #scroller .thelist li{height:60px;padding:0 10px;line-height:60px;background:#ecf6ff;margin-top:10px;}

#pullDown,#pullUp{height:30px;line-height:30px;padding:0 10px;color:#888;text-align:center}

javascript

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

function loaded(){

pullDownEl = document.getElementById('pullDown');

pullDownOffset = pullDownEl.offsetHeight;      //获取下拉刷新的div高度 30

pullUpEl = document.getElementById('pullUp');

pullUpOffset = pullUpEl.offsetHeight;               // 获取上拉加载的div高度 30

myScroll = new iScroll('wrapper',{

useTransition: true,                 //options.useTransition 默认为true,支持css transition 动画;

topOffset: pullDownOffset,     //通过topOffset参数属性设置iScroll已经滚动的基准值;

onRefresh: function(){             //通过onRefresh参数方法调整刷新后的界面结构

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(){                         //通过onScrollMove参数方法判断当前滚动是在顶端还是底端

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 = '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 = '释放刷新';

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 = '加载中';

pullDownAction();

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

pullUpEl.className = 'loading';

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

pullUpAction();

}

},

});

loadAction();

};

document.addEventListener('touchmove',function(e){

e.preventDefaule();

},false);  //阻止冒泡

document.addEventListener('DOMContentLoaded',function(){

setTimeout(loaded,0)

}.false);   //当DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。

//初始状态,加载数据

function loadAction(){

var el, li;

el = document.getElementById('thelist');

for(var i = 0; i < 10; i++){

li = doument.createElement('li');

li.innerHtml = '初始数据--' + (++generatedCount);

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

};

myScroll.refresh();

};

//下拉刷新当前数据

function pullDownAction(){

setTimeout(function(){

//这里执行刷新操作

myScroll.refresh();

},400);

};

//上拉加载更多数据

function pullUpAction(){

setTimeout(function() {

var el, li;

el = document.getElementById('thelist');

for(var i = 0; i < 10; i++){

li = doument.createElement('li');

li.innerText= '上拉加载--' + (++generatedCount);

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

};

myScroll.refresh();

},400);

}

//ajax

eg:  function pullUpAction(){

setTimeout(function(){

var el, li, i;

document.getElementById("thelist");

//========================

$.ajax({

type: "GET",

url: "LoadMore.aspx",

data: { page: generatedCount },

dataType: "json",

success: function(data){

var json = data;

$(json).each(function(){

li = document.createElement('li');

li.innerHtml = ' XXXXXXXXXXXX';

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

})

}

});

//==========================

myScroll.refesh();

},1000);

}

e9a1d66b51ddc5c9510c7dbe83ea27f6.png

参考搬运代码地址:http://blog.csdn.net/xw505501936/article/details/48975991

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iScroll 可以很方便地实现上拉加载下拉刷新,下面是一个简单的示例代码: ```html <div id="wrapper"> <div id="scroller"> <ul> <li>1</li> <li>2</li> <li>3</li> ... </ul> </div> <div id="pullDown"> <span>下拉刷新</span> </div> <div id="pullUp"> <span>上拉加载更多</span> </div> </div> ``` ```javascript var myScroll = new IScroll('#wrapper', { probeType: 3, mouseWheel: true, scrollbars: true, fadeScrollbars: true, interactiveScrollbars: true, shrinkScrollbars: 'scale', click: true, pullDownRefresh: true, pullUpLoad: true }); // 下拉刷新 myScroll.on('scroll', function() { if (this.y > 30) { $('#pullDown span').html('松开刷新'); } else { $('#pullDown span').html('下拉刷新'); } }); myScroll.on('scrollEnd', function() { if (this.y > 30) { // 执行下拉刷新操作 setTimeout(function() { myScroll.refresh(); }, 1000); } }); // 上拉加载 myScroll.on('scroll', function() { if (this.y < (this.maxScrollY - 30)) { $('#pullUp span').html('松开加载'); } else { $('#pullUp span').html('上拉加载更多'); } }); myScroll.on('scrollEnd', function() { if (this.y < (this.maxScrollY - 30)) { // 执行上拉加载操作 setTimeout(function() { myScroll.refresh(); }, 1000); } }); ``` 上面的代码中,我们在 iScroll 的配置中开启了 `pullDownRefresh` 和 `pullUpLoad` 两个选项,然后监听 `scroll` 和 `scrollEnd` 事件,根据滚动的位置来判断是否需要触发下拉刷新上拉加载操作。在触发操作后,我们可以通过 setTimeout 来模拟异步加载数据的过程,然后调用 `myScroll.refresh()` 来iScroll 的状态。这样就可以实现简单的上拉加载下拉刷新功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值