onPageScroll: function (res) { // Do something when page scroll this .setData({ scrollTop: res.scrollTop }) }, |
这样做影响性能啊,而且没必要,如何在滚动结束的时候只进行一次setData???
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 操作系统 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|---|
小程序 | 需求 | onPageScroll | 微信iOS客户端 | 6.6.7 | 2.0.2 |
4 个回答
微信官方说的可以在page中定义一些特殊的函数,事件处理函数
而页面滚动事件被触发,说明是有用户在与页面产生交互,也就是会有手指按下和抬起的动作
所以我们可以在page的data中设置一个控制的开关switchBreak
data:
{
switchBreak:false;
},
然后在视图层给页面盒子绑定 touchend 事件 touchend = "toEnd",当手机触摸事件结束的时候,修改开关的状态
toEnd:function(event)
{
this.setData(
{
switchBreak:true;
})
},
然后再页面滚动触发事件时将要执行的代码体之前先判断开关状态,true执行,false不执行
onPageScroll:
function
(res)
{
先判断开关状态
var that = this;
if(that.data.switchBreak)
{
this
.setData(
{
scrollTop: res.scrollTop
});
}
},
关键的是要获取页面滚动结束时的触发的事件来设置开关状态.
这只是我的猜想,如果有不对的地方请指正.联系QQ:2900976495,微信:游鹄君
老哥,你这种方法,touchEnd执行把switchBreak改为true的时候,onPageScroll也结束了,正好不能改变scrollTop的值,哈哈,后来受你启发,我用了下面的方法,不用onPageScroll了。
touchEnd:
function
(event) {
var
that =
this
wx.createSelectorQuery().selectViewport().scrollOffset(
function
(res) {
that.setData({
scrollTop: res.scrollTop
})
}).exec()
},
这样子安卓会有延迟。有跳动问题
没感觉 ==
你是IOS还是安卓?
你是IOS还是安卓?
throttle函数了解下
// Setup isScrolling variable var isScrolling; // Listen for scroll events window.addEventListener('scroll', function ( event ) { // Clear our timeout throughout the scroll window.clearTimeout( isScrolling ); // Set a timeout to run after scrolling ends isScrolling = setTimeout(function() { // Run the callback console.log( 'Scrolling has stopped.' ); }, 66); }, false);
网上找了个教程,大概思路是这样的,设置一个超时器,每次滚动的时候就重置这个超时器,只有当停止滚动并等待大概66ms的时候才会运行超时器里面的回调函数。把setData放在里面就能够实现滚动停止“一段时间”之后再去setData。
我也想知道,怎么判断页面滚动停止了,比如手上划页面滚动中,如何知道它停止了?