微信小程序触底加载刷新回弹
(阻止多次刷新的解决方法)
1、为何会出现这样的情况,导致多次下拉刷新?
答:手机、ipad等用户使用微信小程序下拉时,由于页面布局的弹性,可能会导致下拉触底时,页面会上下弹动。在弹动的时候,页面也就会多次触底。
- 原始代码如果是这样的:
onReachBottom: function(){
setTimeout(function(){this.getNews();},500);
}
(它会在每一次滑动触底的时候,执行setTimeout()函数中的延迟刷新,如果是上面所说的那种导致多次触底的情况,该函数就会多次的被执行。执行进程中也就会生成多个setTimeout()的定时器,导致多次不必要的刷新。)
如果这样您不能理解我是个什么意思
那你out了
~~掌嘴
为此,我决定用最通俗易懂的方式给你们说明原因。
1、在页面回弹时,触底事件就多次触发,也就会多的执行不知道多少次的setTimeout()。
2、…(此处本有一万字)
| 触发情况 | 执行函数 |
|---|---|
| 触发一次 | setTimeout() |
| 再触发一次 | setTimeout() |
| 再再触发一次 | setTimeout() |
| … | … |
举个栗子:小明因为某个原因找父母要一百元,父母也很爽快的给了他一百元,但是小明不满足,用了10元之后又来找父母要。并且不断的要,而且父母也不断的给他钱。这就造成了小明积累的大量的财富,父母发现了这样下去小明会造成资源的浪费。于是父母要求小明用完了这一百元之后才能再来找他们要钱。如果再没用就来找他们要钱,他们就会先没收他剩余的钱,再给他一百元。
这也就是下面的解决办法
- 进入主题:letsGo
The topic just one thing
var timer;
onReachBottom: function(){
if(timer != null ) {clearTimeout(timer);};
timer = setTimeout(function(){this.getNews();},500);
}
简单解释一下:
如果在回弹的影响下,触底事件进行多次执行。如果上一次的执行还没有完成,也就是说上一次的500毫秒的延迟还没有结束,而此时又继续触底,那么我将通过 if(timer == null ) {clearTimeout(timer);};判断清空定时器的内容和设置的时间。
然后以最后一次触底的事件为起点计时500毫秒再执行刷新的过程。也就是免去了多次间断性刷新的浪费。
版权声明:本文为weixin_44703147原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。