前两天刚做的一个项目,需要用上拉加载的方式去请求数据。我原以为这会是很简单的,肯定分分钟写完(不过确实也挺简单的),只不过还是坑了我一些的。

坑一

$(window).scroll(function(){var scrollTop = $(this).scrollTop();var scrollHeight = $(document).height();var windowHeight = $(this).height();if(scrollTop + windowHeight == scrollHeight){alert("you are in the bottom");}
});

看完上面的代码是不是觉得完全没有毛病,嗯呐~,当初我也是这样觉得的,很对呀。而且我在安卓手机和chrome模拟器上完全没有问题。scrollTop获取的是滚动条滚动的距离,scrollHeight获取到的是整个文档的高度,windowHeight是获取当前也就是你浏览器所能看到的页面的那部分的高度,你已经滚过的高度+你目前看到的剩下的可视高度等于你整个文档高度的时候,确实表示了滚动条就在文档的最下面了。嗯,灰常好。然后你就灰常开心的去请求数据去了,也就是这样:

是不是你现在也觉得木有毛病。我当时测的时候也很开心。但是当我去借了个苹果的测试机来测的时候尼玛问题来了。也就是我要讲到的第一个坑。这段js对苹果木有反应。我就想着是咋回事嘛~,搞了半天才发现,原来自己傻了

if(scrollTop + windowHeight == scrollHeight){alert("you are in the bottom");}

其实坑就在这句话中,因为是写的等于,所以只有一个点能判断到达底部了,如果你不断的触动屏幕,很有可能的你滚动条就已经达不到这个点了,而且加上苹果手机到达底部的时候,你再滑动的时候页面会被拖出一个区域,所以这个点对于苹果手机来说有问题。所以不能改成一个点。而且还有一个重要的原因就是,你的数据是请求得来的,你还需要拿数据去渲染页面,为了用户不等待,你需要预留一段时间来请求,而不是等到已经最底部了再去请求。所以我立马高兴的改成了这样:

if(scrollTop + windowHeight > scrollHeight -100){alert("you are in the bottom");}

这样就是代表你在距离底部100px的时候都会给你触发到达底部了。这样果然苹果没问题了。但是我立马发现了另外一个问题,也就是坑二。

坑二

数据重复了,啥意思呢?就是说你的滚动条如果一直在距离底部100px的范围内得到话,它就会给你去执行你的render()方法,然后去渲染页面。你想如果你一直在100px的范围的话,那他就会给你不断的去发请求,上一个请求还没执行完,你又去了,请求的数据肯定会被重复。所以解决的办法呢就是你设置一个标志,如果上一次请求成功了之后,页面渲染完成了之后,你再去请求,这样就好了。代码如下:

相比于刚刚的代码,我加上了一个isSucc的变量来判断,第一次请求这个变量是true,你可以去请求,一进入后立马把这个变量设置为false,代表我这次的请求还没完全走完,你下一波等等,等到页面完全渲染好了,请求已经done了后你再把这个变量设置为true,然后下一波就可以去请求了。

你以为写到现在完了,其实还有一个问题,就是当数据库中已经没有数据了,你就不能再狂发请求了,所以你还需要干一件事,就是再设置一个标志来判断数据库中是否还有数据,有,就去请求,没有就不要再去请求了。
所以最终的代码应该是这样:

好啦~到现在为止一个上拉加载才写好了,啦啦啦啦啦~写的不对的地方望大神指教好改正!

上拉加载你这个坑货~相关推荐

  1. better-scroll 实现下拉刷新、上拉加载的那些坑

    简介 better-scroll 是一款近几年移动端常用的插件,重点解决移动端(已支持PC)各种滚动场景需求的插件.可以实现竖向滚动效果,也可以实现横向滚动的效果.它不仅可以做普通的滚动列表,还可以做 ...

  2. uniapp上拉加载的避坑指南

    uniapp上拉加载 uniapp的上拉加载和下拉刷新一样都有两个方法, 一个是整体的上拉(生命周期函数onReachBottom), 一个是局部的上拉(基于scrpll-view组件); 一.整个页 ...

  3. 用vant框架做H5时踩过的坑(下拉刷新、上拉加载等)

    用vant框架做H5时踩过的坑 1. 页面在手机端不能上下滑动,在PC端浏览器正常滑动 说明:在设置了overflow:auto;属性的前提下,H5页面在PC端浏览器里展示可以上下滑动,在ios上可正 ...

  4. 上拉加载下拉刷新了解下

    2019独角兽企业重金招聘Python工程师标准>>> 老样子,我们先,哦不,今天我们直接上思路,没有效果图,真的没有 我们依旧从界面及逻辑两块进行分析 1.界面上,只分成简单的两块 ...

  5. Mui Webview下来刷新上拉加载实现

    有些事情经历过之后才会发现,原来再次之前我是如此的啥,因为是第一次做,毫无头绪,有时会想假如有个一demo就好了,那么就不会花费这么多的无用功了.今天使用mui 的webview实现了一个H5页面的上 ...

  6. better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)

    一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> < ...

  7. mui用ajax上拉加载更多,mui上拉加载更多的使用

    demo地址 mui框架中上拉加载的坑 1.在函数自己上拉加载行为后的回调函数 2.在mui封装的上拉加载中,点击某一项会失效. 解决方法 1.该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下 ...

  8. php mescroll,mescroll.js上拉加载下拉刷新组件使用详解

    本文实例为大家分享了上拉加载下拉刷新组件mescroll.js的具体代码,供大家参考,具体内容如下 使用注意事项: 1.引入的时候出问题及时看官方给出的解决方案(基本上都必须看): 2.react中一 ...

  9. 小程序解决上拉加载更多时数据超过1024KB

    参考: 如果解决小程序1024kb渲染之坑 小程序渲染数据超过 1024k 的解决办法 新手不会用组件,只能自己再弄一个简单一点的解决,直接上代码. app.js // arr 数组,len 长度, ...

最新文章

  1. EF6学习笔记五:继承三策略
  2. sqlserver2000 中文排序问题
  3. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...
  4. 绕过安卓SSL验证证书的四种方式
  5. 线性回归原理和实现基本认识(转载)
  6. 同批号不同批次同一单据中出现数量不限制
  7. 消除由try/catch语句带来的Warning
  8. 加拿大上市矿企Bitfarms完成第二笔1500万美元普通股私人认购
  9. MacOS使用top命令查看进程使用内存
  10. 51单片机数码管小数点c语言,求助一个51单片机控制的数码管计算器带小数点功能的...
  11. 在c#使用Windows IOCP(完成端口)编程研究
  12. IEnumerable.Select和SelectMany的区别
  13. 数据结构与算法之美-字符串匹配(上)
  14. android 方法不会覆盖或实现超类型的方法,React Native Android:方法不会覆盖或实现超类型的方法...
  15. 挖一挖那些让公司网站瘫痪的SQL“终结者”
  16. 彻底与流氓软件“2345好压全家桶”说再见【忠告:不要安装2345系列的任何东西--否则你会后悔的】
  17. 系统的x86与x64是什么意思以及他们的区别?
  18. Oracle 语句大全,确实不错,赶紧转走!
  19. 文件不小心删除了怎么恢复?实用的两个小妙招
  20. PostgreSQL的MVCC

热门文章

  1. mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
  2. python 链表的中间节点
  3. 大学python笔记_Introduction to Python课程笔记
  4. 服务器定期巡检项目,服务器定期巡检制度..docx
  5. matlab统计矩阵元素的出现次数
  6. php 7 pcntl扩展,PHP_Linux系统中为php添加pcntl扩展,pcntl扩展可以支持php的多线程 - phpStudy...
  7. php内核总结_深入PHP内核之面向对象总结
  8. 某班学生有50人会c语言的有40人,《离散数学》期末考试题目及评分标准
  9. java做台球时老是闪屏_电脑老是闪屏的原因和解决办法
  10. 区域内点的个数_JAVA