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

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;
                }


http://www.kler.cn/news/314503.html

相关文章:

  • 电子竞技信息交流平台|基于java的电子竞技信息交流平台系统小程序(源码+数据库+文档)
  • 输电线路绝缘子红外检测数据集
  • 使用python-pptx将PPT转换为图片:将每张幻灯片保存为单独的图片文件
  • Android命令行启动settings
  • 基于Spring Boot的Java免税商品优选商城设计
  • 如何有效检测住宅IP真伪?
  • dbt compile 命令及应用
  • docker基本(仅供自己参考)
  • RK3568笔记六十:V4L2命令测试
  • 【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (超详细、附免费教学数据、收藏!)
  • Linux系统下rar压缩包怎么解压
  • 我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪
  • FreeRTOS的递归互斥锁
  • [SDX35+WCN6856]SDX35 + WCN6856 默认增加打包wifi配置hostapd_24g.conf和hostapd_5g.conf操作方法
  • hive分区详细教程
  • 标准c语言(一)
  • 图像处理与OCR识别的实践经验(2)
  • Spring IDEA 2024 安装Lombok插件
  • 基于51单片机的汽车倒车防撞报警器系统
  • 我的AI工具箱Tauri版-VideoDuplication视频素材去重
  • 网关过滤器:Spring Cloud Gateway
  • 使用 Fairseq 进行音频预训练:Train a wav2vec 2.0 base model配置与实现
  • 公私域互通下的新商机探索:链动2+1模式、AI智能名片与S2B2C商城小程序的融合应用
  • USB的口各种区别你都知道吗?
  • html外部链接css怎么引用
  • macOS平台编译libidn2库给iOS及macOS用
  • docker拉取 jdk 8
  • 前端入门:HTML+CSS
  • NoSQL数据库实战派
  • 为什么要关闭SMB V1