下拉加载更多时bindscrolltolower多次执行

来源:21-6 设置loading状态

田小雨

2017-03-30

wxml代码
<import src="../movie/movie.wxml"/>
<template name="movieGridTemplate">
	<scroll-view class="movie-grid" scroll-y="true" bindscrolltolower="moviePageScroll">
		<block wx:for="{{movies}}" wx:for-item="movieGrid" wx:key="movieGrid">
			<view class="grid-item">
				<template is="movieTemplate" data="{{...movieGrid}}"/>
			</view>
		</block>
	</scroll-view>
</template>
js代码
moviePageScroll:function(event) {
    var nextUrl = this.data.requestUrl + "?start=" + this.data.currentCount + "&count=20";
    util.getMovieRequest(nextUrl,this.handleMovieData);
  }

下拉一次bindscrolltolower事件触发好几次

鼠标滚动了一次,方法执行了四次

http://szimg.mukewang.com/58dc86f50001433e10950735.jpg

写回答

6回答

7七月

2017-03-30

对了,如果要测试这个问题。那么最好的方式是,写一个最简单的scroll-view测试下,把环境的问题分离开,单纯的测试下下拉会不会重复触发。

0
4
7七月
回复
慕先生4561975
加一个treadhold属性来控制一下阀值,具体看一下文档。
2017-11-17
共4条回复

7七月

2017-03-30

这个页面的代码写法,在小程序中途更新后,我做了修改,课程里也做了相应的字幕提醒。使用scroll-view会导致下拉刷新无法执行。更新文章 在这里:https://zhuanlan.zhihu.com/p/24739728?refer=oldtimes。建议改为使用view而不是scroll-view。至于多次刷新这个问题,我也单独在另外的项目里测试了下,没有发现多次执行的问题。

0
0

7七月

2017-03-30

稍等 我测试下

0
0

Peggy7

2017-05-10

我也遇到了这个问题 且各种找答案无果 最后自己试出来一个办法 将lower-threshold属性设为0或者1或者很小的值,就可以只加载一次 因为小程序更新后lower-threshold的默认值是50 超过50之后就会多次触发 希望答案有用

10
6
慕粉15128410015
回复
qq_守护之翼_0
非常感谢
2017-11-25
共6条回复

慕先生4561975

2017-11-16

我也遇到同样的问题,不但触发多次,还会出现数据重复的情况。昨晚想了一下,弄了一个解决方案:

在page里面加一个变量httpLock,初始值为false,表示请求锁定,每当请求的时候判断这个锁,如果当前已经发送请求了,那么对于后面出现的多次刷新则不发送请求,当http请求完成时,释放该锁就可以了。

当然也可以使用事件节流来达到此目的,在指定时间内只发送一次请求

0
0

之于子归_

2017-07-23

用一个定时器来控制好了,1S内只允许触发一次

0
0

微信小程序入门与实战(全新版) 超20000人学习的好课

4年同步微信官方迭代,累计20000+人学习, 比微信官方更火爆!

23865 学习 · 6899 问题

查看课程