H5基于iScroll实现下拉刷新和上拉加载更多
发布时间 - 2026-01-11 02:23:24 点击率:次前言

前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据而已,上拉是追加数据。
使用技巧
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实现下拉刷新上拉加载的功能实例
# 加载
# 完成后
# 自定义
# 自己的
# 加载中
# 有个
# 在这个
# 分页
# 刚开始
# 时就
# 脑海里
# 绑定
# 最关键
# 翻页
# 使用技巧
# 大家多多
# 前一段
# 时需
# 事后
# 这时候
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 闭包写法详细介绍
Laravel如何实现本地化和多语言支持?(i18n教程)
如何注册花生壳免费域名并搭建个人网站?
详解jQuery中基本的动画方法
UC浏览器如何设置启动页 UC浏览器启动页设置方法
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
JS实现鼠标移上去显示图片或微信二维码
Laravel用户密码怎么加密_Laravel Hash门面使用教程
QQ浏览器网页版登录入口 个人中心在线进入
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何在腾讯云免费申请建站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
phpredis提高消息队列的实时性方法(推荐)
网易LOFTER官网链接 老福特网页版登录地址
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何在阿里云通过域名搭建网站?
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何用西部建站助手快速创建专业网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
,在苏州找工作,上哪个网站比较好?
如何彻底卸载建站之星软件?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
油猴 教程,油猴搜脚本为什么会网页无法显示?
js代码实现下拉菜单【推荐】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
晋江文学城电脑版官网 晋江文学城网页版直接进入
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
,怎么在广州志愿者网站注册?
Python文件异常处理策略_健壮性说明【指导】
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Android实现代码画虚线边框背景效果
Laravel怎么实现验证码(Captcha)功能
高防服务器租用如何选择配置与防御等级?
如何快速完成中国万网建站详细流程?
免费视频制作网站,更新又快又好的免费电影网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
黑客入侵网站服务器的常见手法有哪些?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
高性价比服务器租赁——企业级配置与24小时运维服务

