瀑布流加载时滚动卡顿,IntersectionObserver优化无效怎么办?
我在用IntersectionObserver实现瀑布流布局时,发现滚动到加载区时页面会卡顿半秒。之前用了虚拟滚动只渲染可视区元素,但瀑布流布局高度不固定,改用观察器动态加载后问题依旧。代码逻辑应该是对的,但加载时控制台显示大量recalculateStyle警告:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
for(let i=0; i<20; i++) { // 每次加载20条
const item = document.createElement('div');
item.style.height = Math.random()*200+200 + 'px';
this.container.appendChild(item);
}
observer.unobserve(entry.target);
}
});
}, { rootMargin: '200px' });
observer.observe(this.loadTrigger);
试过把20改成5,卡顿稍微缓解但图片懒加载时依然明显。是不是DOM操作太频繁了?或者应该用其他方式计算列高度?
如果还卡,建议把图片资源提前加载好,别等到滚动才加载,太影响体验了。