You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vuetify的v-data-table组件上监听滚动事件?

监听Vuetify v-data-table固定表头场景下的滚动事件方法

针对你提到的设置了固定高度、表头固定的v-data-table的主体滚动事件监听需求,由于Vuetify没有为该场景内置滚动事件抛出,可通过手动绑定滚动容器事件的方式实现:

实现步骤

  • 首先给v-data-table添加ref属性,用于快速定位组件DOM:
<v-data-table
  ref="myDataTable"
  fixed-header
  :height="400"
  :headers="headers"
  :items="desserts"
  item-key="name"
  disable-pagination
  hide-default-footer
></v-data-table>
  • 在组件挂载阶段获取表格内部滚动容器(固定表头场景下滚动区域是类名为.v-data-table__wrapper的元素),绑定scroll事件,同时在组件卸载前解绑事件避免内存泄漏:
// Vue2 写法
mounted() {
  const scrollContainer = this.$refs.myDataTable.$el.querySelector('.v-data-table__wrapper')
  scrollContainer.addEventListener('scroll', this.onTableScroll)
},
beforeDestroy() {
  const scrollContainer = this.$refs.myDataTable.$el.querySelector('.v-data-table__wrapper')
  scrollContainer?.removeEventListener('scroll', this.onTableScroll)
},
methods: {
  onTableScroll(e) {
    // 可获取所有滚动相关参数
    const scrollTop = e.target.scrollTop // 垂直滚动距离
    const isBottom = e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight // 是否滚动到底部
    console.log('表格滚动触发', scrollTop, isBottom)
    // 自定义业务逻辑
  }
}

适配Vuetify3的差异点

如果是Vuetify3+Vue3环境,仅生命周期和ref获取逻辑有微调:

// Vue3 组合式API写法
import { ref, onMounted, onBeforeUnmount } from 'vue'

const myDataTable = ref(null)

const onTableScroll = (e) => {
  // 业务逻辑同Vue2写法
}

onMounted(() => {
  const scrollContainer = myDataTable.value.$el.querySelector('.v-data-table__wrapper')
  scrollContainer.addEventListener('scroll', onTableScroll)
})

onBeforeUnmount(() => {
  const scrollContainer = myDataTable.value.$el.querySelector('.v-data-table__wrapper')
  scrollContainer?.removeEventListener('scroll', onTableScroll)
})

注意事项

  • 绑定事件需要在组件DOM完全渲染后执行,不要在created等更早的生命周期操作
  • 如果表格通过v-if动态显示隐藏,需要在表格显示后重新执行事件绑定逻辑

内容的提问来源于stack exchange,提问作者DZN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:06:03