原生js实现上滑加载,下拉刷新,含BATJM大厂

本文介绍了如何使用JavaScript实现滚动加载功能,包括检测滚动位置、计算需加载内容高度、节流处理以及基本的DOM操作,如字符串转DOM和元素插入。作者还展示了在页面顶部和底部的加载提示及加载完成后的效果。
摘要由CSDN通过智能技术生成

list.addEventListener(“scroll”, function () {

//这里可以获取到ul距离屏幕顶部的距离,每次滚动都会刷新

console.log(this.scrollTop);

})

来做一个分析,接下来不要着急写代码

在这里插入图片描述

看到这个图,我们就知道要做什么了

//ul的高度 不变的 定死的

let listH = list.clientHeight;

//所有li总高度

let contentH = this.childNodes.length * 41;

//差值

let diffValue = contentH - listH;

//距离视窗还有50的时候,开始触发;

if (this.scrollTop + 50 >= diffValue) {

console.log(‘该加载了…’)

getData();

}

上滑加载完美实现,当我滑到快到最后一个li的时候,触发获取数据的方法

我们再添加一个节流阀,不让它无限加载。

function getData() {

var html = ‘’;

for (var i = 0; i < 20; i++) {

html += ‘

  • 我是第’ + (i + 1) + ‘个li
  • ’;

    }

    var length = list.children.length;

    if (length === 0) {

    list.innerHTML = html;

    } else if(length > 0 && length < 100){

    //html是字符串

    var newHtml = parseDom(html);

    //后面插入元素

    insertAfter(newHtml, list.children[length - 1]);

    }else if(length === 100){

    console.log(“已经到底了,别拉了”);

    }

    }

    这里有两个非常重要的方法,都是原生js操作

    1.字符串dom化

    //字符串dom化

    function parseDom(arg) {

    var objEle = document.createElement(“div”);

    objEle.innerHTML = arg;

    return […objEle.childNodes];

    };

    2.在已有元素后面插入元素

    //在已有元素后面插入元素

    function insertAfter(newElement, targetElement) {

    newElement.forEach(element => {

    //在后面插入元素 after:js新的dom api

    targetElement.after(element)

    });

    return

    }

    下拉加载

    通过判断ul的scrollTop值,当ul的scrollTop === 0的时候,触发

    添加到监听滚动事件里,加一些样式操作即可

    有些许粗糙,功能为主,见谅见谅

    if(this.scrollTop === 0){

    list.style.top = “80px”;

    loading.style.top = “40px”;

    //刷新数据

    setTimeout(()=>{

    loading.style.top = “0”;

    list.style.top = “40px”;

    },1000)

    }

    那么完整代码就是


    Document

    我是头部

    加载中......
      已加载全部数据

      我是尾部

    • 7
      点赞
    • 12
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值