原生js实现上滑加载,下拉刷新(1)

本文介绍了如何使用JavaScript监听滚动事件,实现当用户滑动列表时动态加载更多内容。作者详细讲解了计算内容高度、滚动距离判断、节流处理以及原生DOM操作方法,如字符串转DOM和元素插入等。
摘要由CSDN通过智能技术生成

我是头部

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

    我是尾部

    会得到这样一个网页,头部底部固定,中间部分可滑动

    在这里插入图片描述

    接下来,我们来监听ul的滚动事件

    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

      我是头部

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

        我是尾部

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值