前言

前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据而已,上拉是追加数据。
使用技巧
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);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# H5
# iScroll
# 下拉刷新
# 上拉加载
# 基于iscroll.js实现下拉刷新和上拉加载效果
# 基于HTML5上使用iScroll实现下拉刷新
# 上拉加载更多
# IScroll5实现下拉刷新上拉加载的功能实例
# 加载
# 完成后
# 自定义
# 自己的
# 加载中
# 有个
# 在这个
# 分页
# 刚开始
# 时就
# 脑海里
# 绑定
# 最关键
# 翻页
# 使用技巧
# 大家多多
# 前一段
# 时需
# 事后
# 这时候
相关文章:
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
西安大型网站制作公司,西安招聘网站最好的是哪个?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何在云服务器上快速搭建个人网站?
相册网站制作软件,图片上的网址怎么复制?
网站微信制作软件,如何制作微信链接?
网站制作公司排行榜,抖音怎样做个人官方网站
宿州网站制作公司兴策,安徽省低保查询网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
平台云上自主建站:模板化设计与智能工具打造高效网站
网站按钮制作软件,如何实现网页中按钮的自动点击?
营销式网站制作方案,销售哪个网站招聘效果最好?
c++ stringstream用法详解_c++字符串与数字转换利器
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
制作企业网站建设方案,怎样建设一个公司网站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
如何快速生成橙子建站落地页链接?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
建站之星后台管理系统如何操作?
如何选择高性价比服务器搭建个人网站?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何挑选优质建站一级代理提升网站排名?
如何通过免费商城建站系统源码自定义网站主题与功能?
定制建站哪家更专业可靠?推荐榜单揭晓
广州建站公司哪家好?十大优质服务商推荐
香港服务器部署网站为何提示未备案?
如何设计高效校园网站?
北京网站制作的公司有哪些,北京白云观官方网站?
如何生成腾讯云建站专用兑换码?
如何通过NAT技术实现内网高效建站?
C++如何编写函数模板?(泛型编程入门)
装修招标网站设计制作流程,装修招标流程?
如何在阿里云通过域名搭建网站?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
山东云建站价格为何差异显著?
如何使用Golang安装API文档生成工具_快速生成接口文档
公司门户网站制作流程,华为官网怎么做?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何快速搭建支持数据库操作的智能建站平台?
建站主机系统SEO优化与智能配置核心关键词操作指南
建站之星后台密码如何安全设置与找回?
存储型VPS适合搭建中小型网站吗?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何制作网站标识牌,动态网站如何制作(教程)?
如何快速上传自定义模板至建站之星?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
*请认真填写需求信息,我们会在24小时内与您取得联系。