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

  滚动加载必须要求后台传的接口中由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. contos 配置国内yum源

    contos配置国内yum源 前言 rpm管理软件包的命令,很难用,需要手动解决以来关系,所以最好用 yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution ...

  2. 4月17日 python学习总结 反射、object内置方法、元类

    一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...

  3. Rafy 框架:领域控制器

    本文简要说明如何使用 Rafy 框架中的领域控制器. 简介 领域控制器是 Rafy 框架中用于封装领域逻辑的主要方式. 在控制器中,开发者可以封装大量的业务逻辑,并向外暴露业务接口.内部的逻辑在实现时 ...

  4. 数据类型 Java day7

    数据类型 数据类型包含:引用数据类型和基本数据类型 引用数据类型:出去基本数据类型,其他的类型,如String 基本数据类型:总共分四大类有八种 四大类:整数,浮点数.字符.布尔 一.整数包含以下 数 ...

  5. TTL、RS232、RS485、UART、串口的关系和常见半双工、全双工协议

    串口(UART口).COM口.USB口.DB9.DB25是指的物理接口形式(硬件) TTL.RS-232.RS-485是指的电平标准(电平信号)   我们单片机嵌入式常用的串口有三种(TTL/RS-2 ...

  6. 【Java面试宝典】你们线上应用的 JVM 参数有哪些?

    -server-Xms6000M-Xmx6000M-Xmn500M-XX:PermSize=500M-XX:MaxPermSize=500M-XX:SurvivorRatio=65536-XX:Max ...

  7. 你知道 Kafka 是如何做到消息的有序性?

    kafka 中的每个 partition 中的消息在写入时都是有序的,而且单独一个 partition 只能由一个消费者去消费,可以在里面保证消息的顺序性.但是分区之间的消息是不保证有序的.

  8. springboot使用@Value注入properties文件中的值,中文乱码

    最近开发一个需求,讲一个中文值配置在properties文件中,然后代码中使用@Value注解进行注入使用,然而出现了如下状况: 中文出现乱码,将代码修改如下: String str = new St ...

  9. mysql行锁、表锁。乐观锁,悲观锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  10. 解释 MySQL 外连接、内连接与自连接的区别 ?

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配. 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条 ...