前言
写项目的时候发现需要这么一个功能,需要给树懒加载上节点,我也不清楚我这方法是不是正经的懒加载,但是效果跟我见过的图片的懒加载差不多,俺寻思着应该就是了
其实要搞懒加载主要要解决几个问题
一、滚动条的容器是什么,也就是说这个滚动条我们是要监控全页面的,还是页面中某一个div中的滚动条,写法会有些不一样
二、怎么计算最后的位置,即使得不管滚动条距离如何加长,最后滚动条都是运行到最下面的时候再加载下一部分数据。(最后据我实践所得,在chrome浏览器中,给到的滚动条运行数据不像是像素,有点像像素x10)
三、解决滚动条在底部反复横跳导致的多次加载问题
问题一
//#号后面是div的id,据我多次测试,true应该是必须的,移除是会报错的(removeEventListener),所以我就没写移除
mounted() {
document.querySelector('#xxxx').addEventListener('scroll', this.handleScroll, true);
},
问题二
//div的高度
let divHeight = document.querySelector("#xxxx").clientHeight;
//滚动内部区域的高度
let scrollHeight = document.querySelector("#xxxx").scrollHeight;
//滚动条滚动的高度
let scrollTop = document.querySelector("#xxxx").scrollTop;
//所以假如我想每次滚动条都是到最后小于20的高度时加载下一波数据,那么方法就是
if(scrollHeight-divHeight-scrollTop<20){
console.log(1);
}
问题三
这个问题比较好解决,加个标记,只有上次请求回来了,再改变标记就可以
附注
记得加载过程加上提示,会更友好一些
相信还有些别的问题会遇到,比如一次请求多少条之类的,但这些与文章主题无关,就不再赘述了
效果图
后语
写文章也是一件耗费心力的事啊,怪不得我之前会停更这么久,还是摸鱼舒服