发布于 2年前

uniapp页面滚动监听

先在前面总结下,下面一共有3种监听滚动的方法。

昨天在做uniapp的图片懒加载,从网上找了个插件,导入到HBuilderX后,捣鼓了一晚上,总算是正常跑起来了。

今天早上,把代码copy到项目上,结果只有第一屏的图片能展示,滑动后,下面的图片都不显示了!-_-!

因为有了昨晚的经验,很快就定位到问题是滚动监听出现了问题。

这个插件的图片懒加载一个关键的地方就是用到滚动监听。

第一种

在普通页面可以用生命周期的“onPageScroll”方法,如下:

onPageScroll(e) {
    // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
    this.scrollTop = e.scrollTop;
},

(这里说下,找到的插件里用的是“Scroll”这个方法,不过据说被过滤了,用不了)

第二种

因为项目中,图片是在子组件里的,“onPageScroll”方法在这也不好使了!!好在找到了另外一个方法:子组件和父组件绑定、通信。

//主页面正常使用这个生命周期的方法
onPageScroll(res) {
    uni.$emit('onPageScroll', res.scrollTop);//传递参数
},

//子组件使用“mounted”这个生命周期方法
mounted() {
    var that = this;
    uni.$on('onPageScroll', function(data) {//接收参数
        console.log(data);
        that.scrollTop = data;
    });
},

本以为到这就可以解决问题了,但是,上面这种方法监听的滚动是页面的,所以如果内容是在“scroll-view”这个组件里面,结果就是:这种方法也失效!

第三种

后面,只能使用“scroll-view”这个组件的@scroll属性了。

//组件中设置这个属性
<scroll-view scroll-y class="page"  @scroll="scroll">

//export default的methods里面定义scroll方法,接收数据
scroll(event) {
    // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
    this.scrollTop = event.detail.scrollTop;//这里的detail里有多个数据,可打印出来,根据需要使用
},
©2020 edoou.com   京ICP备16001874号-3