手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

实现下拉刷新和上拉加载更多功能

时间:2024-10-12 07:25:01

  在移动端中,下拉刷新和上拉加载更多数据的功能使用率还是比较高,开源社区也有很多解决方案,如iscroll,pulltorefresh.js和dropload.js等;而本文是通过自己编写代码实现这两个功能,从而理解实现的基本原理。

实现下拉刷新和上拉加载更多功能

工具/原料

Sublime Text

Chrome浏览器调试

编写静态页面

1、  html代码和css样式如下图,这一块比较简单,也不是本文重点,代码可自行查看下图。

实现下拉刷新和上拉加载更多功能
实现下拉刷新和上拉加载更多功能

变量声明说明

1、  startY:记录触摸时的y坐标;  moveY:记录移动时位置的y坐标;  initTop:记录触摸时“.box”的top值;  transformHeight:判断上拉(<0)或者下拉(>0);   transformTop:记录当前box的top值;  documentHeight:记录文档的高度;  refreshHeight:允许上拉下拉的高度(默认50);  clientHeight:可视窗口的高度。

实现下拉刷新和上拉加载更多功能

下拉刷新实现原理

1、  简单说就是计算滑动和触摸时Y坐标的差值,如果大于0表示向下拉动;松开触摸的时候,如果达到允许下拉刷新的高度就会刷新列表数据;详细分析如下:  监听“touchstart”事件,获取触摸时box的top值(initTop)和获取触摸时的Y坐标(startY),详细代码如下图。

实现下拉刷新和上拉加载更多功能

2、  监听“touchmove”事件:  首先获取滑动的坐标Y(moveY),用来计算滑动和触摸的差苒锃巳伢值transformHeight和当前box的top值(transformTop);  然后滑动的时候,列表的数据跟着滑动的手势进行相应的滑动($(this).css('top', transformTop + 'px'));  最后判断如果差值(transformTop)大于0顶部就显示“下拉更新”,当差值大于(refreshHeight - 5)时候就显示“释放更新”。

实现下拉刷新和上拉加载更多功能

3、  监听“touchend”事件:  首先获取10条新建的数据(var html = getDat锾攒揉敫a());  然后判断如果差值(transformTop)大于0,则继续判断差值是否大于刷新的高度(refreshHeight),如果大于则松开的时候返回到refreshHeight高度,如果小于则不变(transformTop);  最后判断当差值大于(refreshHeight - 5)时候就显示“更新中”,并清空列表数据显示10条数据(项目中就是调用ajax获取最新10条数据)。  Tips:使用animate过渡,效果比较顺畅。

实现下拉刷新和上拉加载更多功能

上拉加载更多实现原理

1、  简单说就是计算滑动和触摸时Y坐标的差值,如果小于0表示向上拉动;松开触摸的时候,如果达到允许上拉加载更多的高度就会加载新数据;详细分析如下:  监听“touchstart”事件,获取文档的高度(documentHeight),详细代码如下图。

实现下拉刷新和上拉加载更多功能

2、  监听“touchmove”事件:  首先获取滑动的坐标Y(moveY),用来计算滑动和触摸的差苒锃巳伢值transformHeight和当前box的top值(transformTop);  然后滑动的时候,列表的数据跟着滑动的手势进行相应的滑动($(this).css('top', transformTop + 'px'));  最后判断如果差值(transformTop)小于0且文档高度(documentHeight)加当前box的top值(transformTop)小于可视窗口的高度(clientHeight),底部就显示“释放更新”。

实现下拉刷新和上拉加载更多功能

3、  监听“touchend”事件:  首先获取10条新建的数据(var html = getData());  最后判断如果差值(transformTop)小于0且文档高度(documentHeight)加当前box的top值(transformTop)小于可视窗口的高度(clientHeight),松开的时候返回到-transformTop(每次加载后都跳到第一条位置),且底部显示“加载中...”并增加10条数据。

实现下拉刷新和上拉加载更多功能
© 手抄报圈