基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
来源: 阅读:965 次 日期:2016-06-25 14:02:16
温馨提示: 小编为您整理了“基于HTML5上使用iScroll实现下拉刷新,上拉加载更多”,方便广大网友查阅!

本文主要介绍在HTML5中使用iScroll实现下拉刷新,上拉加载更多数据的方法,主要就是写了两个自定义函数pullDownAction和pullUpAction,分别在下拉和上拉的事件中调用他们。

前言

前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据而已,上拉是追加数据。

使用技巧

1、引用iScroll.js, 在初始化时添加两个事件监听:touchMove、DOMContentLoaded。

2、实现iScroll插件的onScrollEnd事件, 也就是在这个事件里调用你自己的ajax方法实现数据的刷新和追加。

3、上拉加载更多请求后台时就相当于分页请求数据,这时候需要在ajax请求时发送pageIndex参数,而初始化加载时需要从后台返回一个pageCount以便前台判断。

4、最关键的就是实现下拉刷新方法(pullDownAction)和上拉加载更多(pullUpAction)方法。

运行效果图

名单

实现方法

var  myScroll,

 pullDownEl, pullDownOffset,

 pullUpEl, pullUpOffset,

 generatedCount = 0;

/**

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

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

 */

function pullDownAction () {

 setTimeout(function () { 

 var el, li, i;

 el = document.getElementById('thelist');

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

 li = document.createElement('li');

 li.innerText = 'Generated row ' + (++generatedCount);

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

 }

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

 }, 1000); 

}

/**

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

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

 */

function pullUpAction () {

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

 var el, li, i;

 el = document.getElementById('thelist');

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

 li = document.createElement('li');

 li.innerText = 'Generated row ' + (++generatedCount);

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

 }

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

 }, 1000); 

}

/**

 * 初始化iScroll控件

 */

function loaded() {

 pullDownEl = document.getElementById('pullDown');

 pullDownOffset = pullDownEl.offsetHeight;

 pullUpEl = document.getElementById('pullUp'); 

 pullUpOffset = pullUpEl.offsetHeight;

 myScroll = new iScroll('wrapper', {

 scrollbarClass: 'myScrollbar', 

 useTransition: 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(); // ajax call

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

 pullUpEl.className = 'loading';

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

 pullUpAction(); // ajax call

 }

 }

 });

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

}

//初始化绑定iScroll控件 

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

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

总结:

主要还是要对iScroll做一些初始化的操作,针对不同的动作显示不同的提示信息,然后针对下拉和上拉事件写相应刷新和加载更多的处理方法即可。

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map