做了一个项目,要求将后台数据滚动加载。

  滚动加载必须要求后台传的接口中由pageSize和pageIndex两个参数,来判断每次传数据的条数和数据的页码。

  首先要判断滑轮是向上滚动还是向下滚动,可以在data里设一个变量scrollJudge存储旧的scrollTop,每次滚动事件时都要先判断是否小于新的scrollTop并记录下新scrollTop。若小于,则滑轮向下滚动。

  判断滚动分页加载的时机:什么时候加载下一页?在滚动上去的高度scrollTop加上显示的数据的高度offsetHeight加上我们设置的预留的底部高度(假设为200)之和大于或等于已经加载出来的数据的总高度的时候,就申请加载下一页。已经加载出来的数据的总高度可以用 e.target.childNodes[0].clientHeight 求得。e.target 是滚动事件源,滚动加载函数就绑定在这层容器上,这层容器要设置高度,超出高度时显示滚动条,在它内部另设一个容器,不设高度,高度会由数据自行撑开。e.target.childNodes[0] 就代表这层不设高度的容器,可以由求得其高度。

新修改:   获取子容器高度 clientHeight 可以不再用 e.target.childNodes[0] 推了,可以给子容器设置ref,使用this.$refs获取。

  要提前设置一个page全局变量为1,每次滚动加载后就给page加上1,当作参数传给申请后台数据的接口函数,来说明该传第几页数据出来。注意要提前设置全局变量空数组scrollList,每次接收数据后都要把接收的数据传进这个空数组。在html里用v-for遍历这个数组就可以将数据显示出来了。

  每次接收数据结束后,都要判断接收过来的数据的长度,若小于pageSize,就说明数据传输结束,停止page自加,停止调用申请数据的函数。可以用一个全局变量pageBack来存储每次返回的数据长度,当它等于零时,停止滚动加载。

  注:每次切换新的滚动页面都要把page,scrollList,pageBack,scrollJudge等数据回复初始值。

额外问题:一开始把el-dialog也放进v-for里了,导致每次一点出来他都加载20遍的倍数,其实el-dialog不用放进for循环里,只要控制它的el-button放进去就好了。

  

scrollLoading(e) {
      // 滚动长度
      // 判断滚动加载时机
      if ( e.target.scrollTop + e.target.offsetHeight + 200 >= e.target.childNodes[0].clientHeight    &&    e.target.scrollTop > this.scrollJudge) {
        // 滚动加载
        this.page++;
        this.scrollJudge = e.target.scrollTop;
        // 判断是不是返回最后一段数据
        if (this.pageBack != 0) {
            this.getNodeList(this.textTitle, this.page);
        }
      }
    },
//调用接口传数据
getNodeList(id, page) {
      let item = {};
      item.parentId = id;
      item.pageSize = 20;
      item.pageIndex = page;
      var url = this.Api + "接口地址";
      http
        .myGet(url, item)
        .then((data) => {
          if (data.status === 1) {
            this.parentNodes = JSON.parse(JSON.stringify(data));
            // 根据页数滚动加载
            if (page == 1) {
              this.scrollList = data.messageJson;
            } else {
              this.scrollList = this.scrollList.concat(data.messageJson);
            }
            // 判断是不是滚动到底部
            this.pageBack = data.messageJson.length;
          } else {
            this.$message({
              type: "error",
              message: data.message,
              offset: 100,
            });
          }
        })
        .catch((err) => {
          this.$message({
            type: "error",
            message: err,
            offset: 100,
          });
        });
    },

vue滚动分页加载的更多相关文章

  1. vue滚动分页加载以及监听事件处理

    <template> <div class="bodyContainer"> <div class="allContent" id ...

  2. 微信小程序实现滚动分页加载更多

    参考网址:https://www.cnblogs.com/Smiled/p/8203306.html 1.wxml: <view class='myScroll' style='float:le ...

  3. vue.js 分页加载,向上滑动,依次加载数据。

    export default { layout: 'default', data(){ return{ page:1, pageSize:10, orderListArr:[], prodListLo ...

  4. div滚动底部加载li,window滚动底部加载li

    DIV固定高度滚动条滚动最底部,加载新的li <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...

  5. Android基本控件之listView(三)<用ListView实现分页加载>

    我们之前讨论了ListView的基本使用方法和ListView的优化 今天我们再来讨论一个关于ListView的一个新的东西~就是分页加载.那么什么是分页加载呢?简单点说,就是"下拉刷新&q ...

  6. 【Android进阶】Listview分页加载数据的实现

    Listview分页加载数据的实现 public class MainActivity extends Activity { protected static final int SUCCESS_GE ...

  7. [转]微信小程序之加载更多(分页加载)实例 —— 微信小程序实战系列(2)

    本文转自;http://blog.csdn.net/michael_ouyang/article/details/56846185 loadmore 加载更多(分页加载) 当用户打开一个页面时,假设后 ...

  8. Vue图片懒加载插件

    图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要.今天就用vue来实现一个图片懒加载的插件. 这篇博客采用"三步走"战略--Vue.use().Vue.dir ...

  9. ListView实现分页加载(三)实现分页加载

    在上一篇中,我们实现了底部布局(即带上了进度条).没有读过的朋友可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866966.html 但是进度条 ...

随机推荐

  1. org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests

    https://blog.csdn.net/qq_43349162/article/details/115285780 https://blog.csdn.net/Think_and_work/art ...

  2. spring——整合Mybatis

    一.Mybatis整合spring 步骤: 导入相关jar包 junit mybatis mysql数据库 spring-webmvc aop织入 mybatis-spring spring-jdbc ...

  3. 初学者都能学会的ElasticSearch入门实战

    大家好,我是咔咔 不期速成,日拱一卒 项目中准备使用ElasticSearch,之前只是对ElasticSearch有过简单的了解没有系统的学习,本系列文章将从基础的学习再到深入的使用. 咔咔之前写了 ...

  4. sqlmap的使用手册

    0x01. Sqlmap支持的数据库 SQLMap支持的数据库: MySQL Oracle PostgreSQL Microsoft SQL Server Microsoft Access IBM D ...

  5. path()的name属性,有什么用?

    官网(参考:命名 URL 模式) 命名 URL 模式: 为了完成反向解析 URL ,你需要像上面那样使用 命名 URL 模式 .用于命名 URL 的字符串可以包含任意字符,并不仅限于 Python 里 ...

  6. [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑

    [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 目录 [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 1. GrpcSess ...

  7. Spring MVC的异常处理 ?

    可以将异常抛给Spring框架,由Spring框架来处理:我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可.

  8. Java 建造者Builder

    import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.u ...

  9. java常用方法集合

    1.获取当前日期 // 获取当前日期 public Date getDate(int num) { Calendar cal = new GregorianCalendar(); cal.setTim ...

  10. MySQL 支持事务吗?

    在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时 提交,所以在缺省情况下,MySQL 是不支持事务的. 但是如果你的 MySQL 表类型是使用 InnoDB T ...