博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
滑动到底部无限加载的实现
阅读量:6446 次
发布时间:2019-06-23

本文共 1192 字,大约阅读时间需要 3 分钟。

hot3.png

我们常常会碰到数据条数很多,需要分页显示的情况。对于移动端页面,我们一般会用每次滚动到接近页面底部时,加载更多(下一页)数据的方式。本文就来介绍下滑动到底部无限加载的实现。

实现滑动到底部无限加载,我们要做的是:

  • 监听显示数据内容的元素的滚动事件。
  • 每次元素滚动时,若此时不在加载数据,则计算元素下方没显示的高度值。如果其值小于我们设定的触发加载的值,则加载,显示更多数据;否则什么都不做。
  • 如果没有更多的内容可显示,则不再监视元素的滚动事件。

易知:元素下方没显示的高度值 = 元素总高度 - 元素垂直方向滚动了的距离 - 元素可视区域高度

各种值如下图所示:

我们可知:

元素的 scrollHeight 属性值为其总高度。
元素的 scrollTop 属性值为其垂直方向滚动了的距离。
元素的 clientHeight 属性值为其可视区域高度。

因此, 元素下方没显示的高度值 = elem.scrollHeight - elem.clientHeight - elem.scrollTop

伪代码如下

// 元素下方没显示的高度值小于TRIGGER_SCROLL_SIZE时,触发滚动 var TRIGGER_SCROLL_SIZE = 50; var isLoading = false; // $container 为显示数据内容的元素 $container.scroll(function () {
if(!isLoading){
var totalHeight = $container.prop('scrollHeight'); var scrollTop = $container.scrollTop(); var height = $container.height(); if(totalHeight - (height + scrollTop) <= TRIGGER_SCROLL_SIZE){
isLoading = true; // 加载更多数据 fetchData().done(function(data){
isLoadind = false; if(data.length > 0){
appendData($container); } else {
// 没有更多数据了。 $container.off('scroll'); } }) } } });

完整的 Demo 代码见。

注意,如果显示内容的元素为 body,则取其垂直方向滚动了的距离要用 $(document).scrollTop()。否则会有兼容性问题。

参考

推荐阅读

  •  无限加载 grid 的列表,文章,图片带分页等。

转载于:https://my.oschina.net/u/2306318/blog/1154155

你可能感兴趣的文章
【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法...
查看>>
【POJ2114】Boatherds 树分而治之
查看>>
20、ASP.NET MVC入门到精通——WebAPI
查看>>
CentOS 6.3系统安装配置KVM虚拟机
查看>>
iOS 代理协议
查看>>
隐藏光标与获得光标2----获得光标所在的控件
查看>>
atitit.eclipse 新特性总结3.1--4.3
查看>>
关于写blog这件事
查看>>
JavaScript 设计模式之建造者模式
查看>>
linux 的终端字体色和背景色的修改方法(二)
查看>>
c#的dllimport使用方法详解,调试找不到dll的方法
查看>>
进程中内存地址空间的划分
查看>>
Android性能优化(一)之启动加速35%
查看>>
题外话:Lua脚本语言存在的意义
查看>>
一篇文章,读完物联网技术精华
查看>>
haproxy 关闭ssl3
查看>>
Hibernate学习笔记(六) — Hibernate的二级缓存
查看>>
Vue.js 2.0 独立构建和运行时构建的区别
查看>>
软件评測师真题考试分析-6
查看>>
数据结构 排序(堆排序)
查看>>