当前位置: 首页 > news >正文

vue 2表格滚动加载

自定义指令

// 表格下拉滚动加载更多
Vue.directive('loadmore', {
  bind(el, binding) {
    // 节流函数
    const throttle = (fn, wait = 300) => {
      let inThrottle, lastFn, lastTime;
      return function() {
        const context = this,
              args = arguments;
        if (!inThrottle) {
          fn.apply(context, args);
          lastTime = Date.now();
          inThrottle = true;
        } else {
          clearTimeout(lastFn);
          lastFn = setTimeout(function() {
            if (Date.now() - lastTime >= wait) {
              fn.apply(context, args);
              lastTime = Date.now();
            }
          }, Math.max(wait - (Date.now() - lastTime), 0));
        }
      };
    };

    const selectWrap = el.querySelector('.el-table__body-wrapper');
    if (selectWrap) {
      const handleScroll = throttle(function() {
        let sign = 100;
        const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight;
        if (scrollDistance <= sign) {
          // 触发加载更多
          binding.value();
        }
      }, 300);

      // 使用passive监听器提高滚动性能
      selectWrap.addEventListener('scroll', handleScroll, { passive: true });
    }
  }
});


<el-table
                        v-loading="loading"
                        :data="rankingData"
                        v-loadmore="loadMore"
                        height="525"
                        style="width: 100%;"
                        border
                    >
                        <el-table-column
                            prop="ranking"
                            label="排名"
                            width="100"
                            align="center"
                        />
                        <el-table-column
                            prop="loginTimes"
                            label="登录次数"
                            min-width="100"
                            align="center"
                        ></el-table-column>
                    </el-table>
// 滚动加载
        loadMore() {
            if (this.total > this.rankingData.length) {
                this.query.pageNum++;
                this.getRankingList();
            }
        }


// 去除重复数据
                const dataList = data.result;
                if (dataList.length) {
                    // 使用 Set 来去重
                    const appIds = new Set(this.rankingData.map(data => data.appId));
                    const notExistData = dataList.filter(data =>
                        !appIds.has(data.appId));
                    const rankingData = [...this.rankingData, ...notExistData];
                    // 升序排列
                    this.rankingData = rankingData.sort((a, b) =>
                        a.ranking - b.ranking);
                    this.total = data.count;
                    this.showMoreHint = this.total > this.rankingData.length;
                }

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 心觉:成功学就像一把刀,有什么作用关键在于使用者(一)
  • STM32G474RE之RTC
  • 《Effective C++》第三版——让自己习惯C++
  • [性能]高速收发的TCP/MQTT通信
  • 【最新综述】基于深度学习的超声自动无损检测(下)
  • VirtualBox 克隆已有的虚拟机
  • 小项目建议用redis替换mq
  • Mysql系列-索引简介
  • qt-creator-10.0.2之后版本的jom.exe编译速度慢下来了
  • AI逻辑推理入门
  • FFT提取图像特征
  • harmony初学者入门
  • 【iOS】dismiss多级的方法
  • Xilinx系FPGA学习笔记(九)DDR3学习
  • Gitee注册-添加公钥-建立本地仓库
  • js如何打印object对象
  • MobX
  • Vue.js 移动端适配之 vw 解决方案
  • vue-router 实现分析
  • Wamp集成环境 添加PHP的新版本
  • 工作手记之html2canvas使用概述
  • 说说动画卡顿的解决方案
  • ​比特币大跌的 2 个原因
  • #pragma预处理命令
  • $.ajax中的eval及dataType
  • (function(){})()的分步解析
  • (LeetCode) T14. Longest Common Prefix
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)利用webkit抓取动态网页和链接
  • ./configure,make,make install的作用
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET中 MVC 工厂模式浅析
  • [ C++ ] 继承
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [023-2].第2节:SpringBoot中接收参数相关注解
  • [Android]常见的数据传递方式
  • [C++] new和delete
  • [C++] vector list 等容器的迭代器失效问题
  • [CERC2017]Cumulative Code
  • [Editor]Unity Editor类常用方法
  • [Electron]ipcMain.on和ipcMain.handle的区别
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [GXYCTF2019]BabySQli1
  • [hdu2196]Computer树的直径
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [IT生活推荐]大家一起来玩游戏喽,来的都进!
  • [JS设计模式]Prototype Pattern