【uni-app】uni.createIntersectionObserver 报错问题处理
报错内容Uncaught TypeError: Cannot read property 'bottom' of nullat a (chunk-vendors.js:319)at chunk-vendors.js:319at Array.forEach (<anonymous>)at IntersectionObserver.s.<computed>.Intersecti
·
报错内容
Uncaught TypeError: Cannot read property 'bottom' of null
at a (chunk-vendors.js:319)
at chunk-vendors.js:319
at Array.forEach (<anonymous>)
at IntersectionObserver.s.<computed>.IntersectionObserver.root (chunk-vendors.js:319)
原因
监听的元素找不到了
PS: 似乎只有在h5平台才会从出现
解决方法
在页面的隐藏和卸载生命周期中,取消对元素的监听
onHide:function(){
this.observer.disconnect();//取消监听
},
onUnload: function(){
this.observer.disconnect();//取消监听
},
在监听时判断元素是否存在,并且清除上次的监听
Vue.prototype.$lazyImg = function(fn){
this.observer.disconnect();//必须清除之前的。不然已经加载的元素依旧会监听,或者监听的元素消失了,就会报错
uni.createSelectorQuery().in(this).selectAll('.lazy').boundingClientRect(data => {
if(data.length > 0){//如果页面没有lazy元素,直接就报错,真TM离谱
this.observer.observe('.lazy', (res) => {
if(res.intersectionRatio > 0){//发现有时候intersectionRatio等于undefined的
fn(res.dataset)
}
})
}
}).exec();
}
更多推荐
已为社区贡献5条内容
所有评论(0)