- 肯定不能一次性把几万个 DOM 全部插入,这样肯定会造成卡顿,所以解决问题的重点应该是如何分批次部分渲染 DOM。部分人应该可以想到通过 requestAnimationFrame 的方式去循环的插入 DOM,其实还有种方式去解决这个问题:虚拟滚动(virtualized scroller)。
- 这种技术的原理就是只渲染可视区域内的内容,非可见区域的那就完全不渲染了,当用户在滚动的时候就实时去替换渲染的内容。
- 使用 scrollHeight、scrollTop 和 clientHeight 这是最直接的方法之一。你可以通过比较元素的 scrollHeight(元素内容的高度,包括溢出部分的),scrollTop(元素滚动的顶部距离)和 clientHeight(元素内部的高度,不包括边框)来判断是否滚动到底部。
eg:
function isScrolledToBottom(element) {
return element.scrollHeight - element.scrollTop === element.clientHeight;
}
// 示例:判断窗口是否滚动到底部
window.onscroll = function() {
if (isScrolledToBottom(document.documentElement) || isScrolledToBottom(document.body)) {
console.log("已滚动到底部");
// 执行你的逻辑,例如加载更多内容
}
};