微信小程序的下拉刷新

458 阅读2分钟

思路一:使用IntersectionObserver

这个方法的实现也同样是借助小程序的API实现:用于推断某个元素被用户看见,多大比例看见

一:实现效果:

相对于某个元素效果实现(举例小球在某个元素中出现,实现在某个元素中的下拉刷新):

相对某个元素的效果实现

相对于整个页面元素效果实现(相对于整个页面,拉到距离底部多少距离可见时刷新):

二、实现步骤:

    1、创建观察者对象:
      const this._observer=wx.createIntersectionObserver()
    2、设置参照对象(两种选择)
     a、this._oserver.relativeTo("#dom || .dom") // 选择一个dom元素,意思就是相对某个元素可见
     b、this._oserver.relativeToViewport() //指定页面显示区域作为参照区域之一
    
    3、设置被观察对象
       this._observer.relativeToViewport().observe('dom',(res)=>{
            console.log('res:是观察的结果:',res)
            boundingClientRect:目标边界。这个目标,就是我们的观察对象,可以看到刚开始相交的时候,它的位置情况。这个位置是相对于整个页面的,不是相对于参照元素的。top = 251(px) = scroll-view的高度(200px) + "小球消失/出现"message的高度(52px) - 相交高度(1px)
            dataset: 观察对象携带的数据。
            id:观察对象的id,它与上面的dataset多使用于一次观察多个对象的场景,用于区分不同的对象。
            intersectionRatio 相交比例:大于0的话表示两者有了交集,等于1的话表示两者已经完全相交。
            intersectionRect 相交区域: 可以看出此时只有1px的高度有交集。
            relativeRect:参照区域的边界。通过其上下左右四个属性值可以看出它就是scroll-view组件在页面中的位置。
            time: 监测到两者相交时的时间戳,不太有用。
       })
    4、页面卸载,要销毁观察,否则重新进入页面则无法重现观察结果
     $\color{red}{this._observer.disconnect()}$ 

三、具体实现方法: 1、onload