element plus 滑动到底部翻页

<template>
   <div class="app-container">
     <el-form
       :model="queryParams"
       ref="queryRef"
       :inline="true"
       label-width="68px"
     >
       <el-form-item>
         <!-- <el-button
           type="warning"
           plain
           icon="Download"
           @click="handleExport"
           v-hasPermi="['monitor:logininfor:export']"
           >导出</el-button
         > -->
       </el-form-item>
     </el-form>
 
     <div ref="tableWrapper" style="height: 80vh; overflow: auto;" @scroll="handleTableScroll">

     <el-table v-loading="loading" :data="tableList">
       <el-table-column label="序号" align="center" fixed>
         <template #default="scope">
           {{
             scope.$index + (queryParams.pageNum - 1) * queryParams.pageSize + 1
           }}
         </template>
       </el-table-column>
       <el-table-column
         label="测点key"
         align="center"
         prop="pointKey"
         :show-overflow-tooltip="true"
       />
       <el-table-column
         label="测点名称"
         align="center"
         prop="pointName"
         :show-overflow-tooltip="true"
       />
       <el-table-column
         label="测点参数值"
         align="center"
         prop="pointValue"
         :show-overflow-tooltip="true"
       />
       <el-table-column
         label="越线"
         align="center"
         prop="warnTypeStr"
         :show-overflow-tooltip="true"
       />
       <el-table-column
         label="报警时间"
         align="center"
         prop="ctime"
         :show-overflow-tooltip="true"
       />
     </el-table>
      </div>

     <!-- <pagination
       v-show="total > 0"
       :total="total"
       v-model:page="queryParams.pageNum"
       v-model:limit="queryParams.pageSize"
       @pagination="getList"
     /> -->
   </div>
 </template>
 
 <script setup name="realtime">
 import { listRealtimeAlarm } from "@/api/alarm/realtime";
 
 
 const tableList = ref([]);
 const loading = ref(true);
 const total = ref(0);
 const isThrottled = ref(false);
  const scrollPosition = ref(1000); // 滚动条位置

 // 查询参数
const queryParams = ref({
  pageNum: 1,
  pageSize: 200,
});

 function getList() {
   loading.value = true;
   listRealtimeAlarm(queryParams.value).then((response) => {
     tableList.value = response.data;
     total.value = response.total;
     loading.value = false;
   });
 }

 function handleTableScroll(event) {
   if (isThrottled.value) return;

   const target = event.target;
   const scrollHeight = target.scrollHeight; // 元素内容的总高度
   const scrollTop = target.scrollTop; // 滚动条顶部与元素顶部的距离
   const clientHeight = target.clientHeight; // 可见区域的高度

   // 判断是否滚动到底部
   if (scrollHeight - scrollTop - clientHeight <= 1) {
      isThrottled.value = true; // 设置节流状态

      // 保存滚动条位置
      scrollPosition.value = scrollTop-50;

      setTimeout(() => {
         queryParams.value.pageNum ++
         listRealtimeAlarm(queryParams.value).then(response => {
          tableList.value.push(...response.rows);

            // 在下一个更新周期中设置滚动条位置
            // 这样可以确保数据已经渲染完毕
            nextTick(() => {
              target.scrollTop = scrollPosition.value;
            });
         });

         isThrottled.value = false; // 重置节流状态
      }, 300);
   }
}

 getList();
 </script>
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值