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

  滚动加载必须要求后台传的接口中由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. Mybatis执行流程浅析

    从三个主要的对象SqlSessionFactoryBuilder->SqlSessionFactory->SqlSession说起 inputStream = Resources.getR ...

  2. ansible 一 简介和部署

    一.Ansible的介绍 Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点.实现了批量系统配置 ...

  3. 4月18日 python学习总结 异常处理、网络编程

    一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ...

  4. eclipse新建maven项目:'Building' has encountered a problem. Errors occurred during the build.

    二.eclipse 新建maven 项目报错(因为没有配置maven环境) 1.问题: ① 出现的问题1: Could not calculate build plan:Plugin org.apac ...

  5. 一文了解MySQL的Buffer Pool

    摘要:Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能. 本文分享自华为云社区<MySQL 的 Buffer Pool,终于被我搞懂了>,作者:小林 ...

  6. babel和polyfill?

    Babel: Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码.注意:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ...

  7. Linux上如何设置nginx开机启动

    连接上linux后输入以下命令--vim /etc/init.d/nginx 然后在这个空文件写入下面内容: 保存好后,修改下该文件权限--chmod 777 /etc/init.d/nginx 然后 ...

  8. java的泛型hei

    泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型 泛型也可以看出是一个变量,用来接受数据类型 E e :Element 元素 T t: Type 类型 /* Collecti ...

  9. 是否可以从一个静态(static)方法内部发出对非静态 (non-static)方法的调用?

    不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在 调用静态方法时可能对象并没有被初始化.

  10. Samba通过Openldap统一认证

    1.环境准备1.1.实验环境[root@moban ~]# cat /etc/redhat-releaseCentOS release 6.8 (Final)[root@moban ~]# uname ...