Element ui plus 中 table scroll 自动触底

Element ui plus 中 table scroll 自动触底

场景:添加客户等级的时候,新增的客户等级 input 框 被 scroll 遮挡、重叠,需要保证 scroll 保持在 最底部接可以解决 遮挡、重叠。

在这里插入图片描述

el-table 在设置了 height 后,会选择将 table 表头固定

<el-table :height="tableData.length*40+50>tableHeight?tableHeight:tableData.length*40+50" :data="tableData"
              style="width: 100%;"
              ref="TableRef"
              :cell-style="{ textAlign: 'center' }"
              v-loading="loading"
              :header-cell-style="{ 'text-align': 'center',background: '#f9f9f9', color: 'black',padding:'16px 0px'}"
    >
//table 中的其他内容
</el-table>

获取table内部的 scroll dom 然后并重新赋值

const TableRef = ref()

function scrollBehavior(e) {
  const dom = TableRef.value.$refs.bodyWrapper.getElementsByClassName('el-scrollbar__wrap')[0]
 // 父容器高度 + 子容器距离父容器顶端的高度 = 子容器可滚动的高度
  const {clientHeight, scrollTop, scrollHeight} = dom
  if (clientHeight + scrollTop !== scrollHeight) {
    dom.scrollTop = dom.scrollHeight
  }
}

scrollBehavior 方法就是将 scroll 滚动到底部,选择执行的时间即可;我这里是在添加客户等级的时候进行执行的。

const addNewTableItem = () => {
  if (isAdd.value) {
    ElMessage.warning(i18n.global.t('common.cds49'))
    return
  }
  isAdd.value = true;
  isEdit = true;
  tableData.value.push({
    name: "",
    age: 0,
    address: "",
    editing: true,
  });
  //操作真实dom
  nextTick(() => {
    scrollBehavior()
  })
};

然后就解决了👌
在这里插入图片描述

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在一个组件使用element-plus的InfiniteScroll无限滚动,需要先在组件引入InfiniteScroll,并且在需要无限滚动的元素上绑定v-infinite-scroll指令和相应的事件处理函数。以下是一个示例代码: ```vue <template> <div class="scroll-container" v-infinite-scroll="loadMore" infinite-scroll-disabled="loading"> <ul> <li v-for="(item, index) in list" :key="index">{{ item }}</li> </ul> <div v-if="loading">Loading...</div> </div> </template> <script> import { ref } from 'vue'; import { useInfiniteScroll } from 'element-plus'; export default { setup() { const list = ref(['Item 1', 'Item 2', 'Item 3']); const loading = ref(false); const { load } = useInfiniteScroll(); const loadMore = async () => { if (loading.value) return; loading.value = true; await load(); list.value.push(`Item ${list.value.length + 1}`); loading.value = false; }; return { list, loading, loadMore, }; }, }; </script> ``` 在这个示例,我们首先在组件引入了`useInfiniteScroll`函数,然后在模板,将需要无限滚动的元素绑定了`v-infinite-scroll`指令,并且设置了`infinite-scroll-disabled`属性,用于指示当前是否正在加载数据。在`setup`函数,我们定义了`list`和`loading`两个响应式变量,以及`loadMore`函数,用于处理滚动事件。在`loadMore`函数,我们首先根据`loading`变量的值决定是否需要加载数据,然后设置`loading`变量为`true`,调用`load`函数加载数据,将新的数据添加到`list`数组,并将`loading`变量重置为`false`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值