H5页面基于iScroll.js插件实现下拉刷新,上拉加载更多
前言
在我之前的项目中,页面总是干巴巴的,用户的体验不是特别完美,我也是一直觉得把设计师给到的psd做出来就好,很少考虑用户的感受。我喜欢看不同的App,操作每个步骤,观赏每个能和我互动的交互设计效果,我很喜欢。感觉有回应。
现在开始实现我页面的第一个交互效果,让我的页面更生动一点。
实现的插件
基于iScroll.js插件
代码
html
<div class="header">我是头部固定</div>
<div id="wrapper">
<div id="scroller">
<div id="pullDown"> <span class="pullDownLabel">下拉刷新</span> </div>
<ul id="thelist">
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
<li>我是小公举</li>
</ul>
<div id="pullUp"><span class="pullUpLabel">上拉加载更多</span></div>
</div>
</div>
<div class=""footer>我是底部固定</div>
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
<script type="text/javascript" src="js/iscroll.js"></script>
<script>
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);
}
</script>

参考搬运代码地址:http://blog.csdn.net/xw505501936/article/details/48975991
H5页面基于iScroll.js插件实现下拉刷新,上拉加载更多的更多相关文章
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
- juery下拉刷新,div加载更多元素并添加点击事件(二)
buffer.append("<div class='col-xs-3 "+companyId+"' style='padding-left: 10px; padd ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- Android如何定制一个下拉刷新,上滑加载更多的容器
前言 下拉刷新和上滑加载更多,是一种比较常用的列表数据交互方式. android提供了原生的下拉刷新容器 SwipeRefreshLayout,可惜样式不能定制. 于是打算自己实现一个专用的.但是下拉 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- JS+CSS实现的下拉刷新/上拉加载插件
闲来无事,写了一个当下比较常见的下拉刷新/上拉加载的jquery插件,代码记录在这里,有兴趣将代码写成插件与npm包可以留言. 体验地址:http://owenliang.github.io/pull ...
- vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件
vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源 ...
随机推荐
- 爬虫_python3_抓取猫眼电影top100
使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...
- iOS 高效 Mac 配置
https://testerhome.com/topics/3045 https://support.apple.com/zh-cn/HT201236
- [LUOGU] P1536 村村通
题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...
- 蓝牙学习 (7) - raspberrryPi 扫描TI sensorTag
前面几篇分别简单涉及了 raspberryPi上bluez BLE sniffer TI SensorTag https://blog.csdn.net/feiwatson/article/detai ...
- RN性能
https://facebook.github.io/react-native/docs/performance.html 一个使用RN而不是webView的重要原因是可实现60fps以及更类似原生a ...
- 解决vm安装centos7网络无法启动问题
采用以下命令: systemctl stop NetworkManager systemctl disable NetworkManager
- git2--常用命令
Git 命令详解及常用命令 Git作为常用的版本控制工具,多了解一些命令,将能省去很多时间,下面这张图是比较好的一张,贴出了看一下: 关于git,首先需要了解几个名词,如下: ? 1 2 3 4 Wo ...
- java编程思想阅读记录
第五章:初始化与清理 1.构造器确保初始化 构造器采用与类名相同的方法. 创建对象时,将会为对象分配存储空间,并调用相应的构造器.这就确保了在你能操作对象之前,它就已经恰当的被初始化了. 垃圾回收器负 ...
- MySQL 2003 [ERROR] /usr/sbin/mysqld: Incorrect key file for table './keyword_search/keyword.MYI'; try to repair it
今天对一个有四百多万数据的表增加一个功能时,当做数据插入时,显示没有插入,到Linux的log下面查看了发现下面这条错误信息 在stacOver上面找到这句: 存储引擎(MyISAM)支持修复表.你应 ...
- 【LeetCode】To Lower Case(转换成小写字母)
这道题是LeetCode里的第709道题. 题目要求: 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串. 示例 1: ...