当前位置:首页 > JavaScript

js实现上拉加载

2026-01-30 12:18:56JavaScript

实现上拉加载的基本思路

监听滚动事件,判断是否滚动到页面底部。当滚动到底部时触发加载更多数据的操作。

监听滚动事件

window.addEventListener('scroll', function() {
    // 判断是否滚动到底部
});

判断滚动到底部的条件

需要比较三个值:

  • 滚动条距离顶部的距离(scrollTop)
  • 可视区域高度(clientHeight)
  • 页面总高度(scrollHeight)
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
const clientHeight = document.documentElement.clientHeight;
const scrollHeight = document.documentElement.scrollHeight;

if (scrollTop + clientHeight >= scrollHeight - 10) {
    // 触发加载更多
}

加载数据的实现

let isLoading = false;
let currentPage = 1;

function loadMore() {
    if (isLoading) return;

    isLoading = true;
    // 显示加载中提示
    showLoadingIndicator();

    fetch(`/api/data?page=${currentPage}`)
        .then(response => response.json())
        .then(data => {
            // 处理新数据
            renderData(data);
            currentPage++;
            isLoading = false;
            // 隐藏加载中提示
            hideLoadingIndicator();
        })
        .catch(error => {
            isLoading = false;
            // 隐藏加载中提示
            hideLoadingIndicator();
        });
}

优化性能

使用节流函数减少滚动事件的触发频率:

js实现上拉加载

function throttle(fn, delay) {
    let timer = null;
    return function() {
        if (timer) return;
        timer = setTimeout(() => {
            fn.apply(this, arguments);
            timer = null;
        }, delay);
    };
}

window.addEventListener('scroll', throttle(checkScroll, 200));

完整示例代码

let isLoading = false;
let currentPage = 1;

function checkScroll() {
    const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    const clientHeight = document.documentElement.clientHeight;
    const scrollHeight = document.documentElement.scrollHeight;

    if (scrollTop + clientHeight >= scrollHeight - 10 && !isLoading) {
        loadMore();
    }
}

function loadMore() {
    isLoading = true;
    showLoadingIndicator();

    fetch(`/api/data?page=${currentPage}`)
        .then(response => response.json())
        .then(data => {
            renderData(data);
            currentPage++;
            isLoading = false;
            hideLoadingIndicator();
        })
        .catch(error => {
            isLoading = false;
            hideLoadingIndicator();
        });
}

function throttle(fn, delay) {
    let timer = null;
    return function() {
        if (timer) return;
        timer = setTimeout(() => {
            fn.apply(this, arguments);
            timer = null;
        }, delay);
    };
}

window.addEventListener('scroll', throttle(checkScroll, 200));

注意事项

  • 确保在加载完成前不会重复触发加载
  • 处理网络请求失败的情况
  • 当没有更多数据时需要显示提示或禁用加载
  • 移动端需要考虑touch事件和滚动性能优化

标签: 加载js
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

jquery加载

jquery加载

jQuery 加载方法 使用 CDN 加载 jQuery 推荐通过公共 CDN(如 Google、Microsoft 或 jQuery 官方)加载,速度快且可能已被浏览器缓存。 <…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…