如何获得Vuetify v-table滚动位置?

cyvaqqii  于 2023-05-18  发布在  Vue.js
关注(0)|答案(1)|浏览(145)

我正在使用一个Vuetify v-table组件,其中包含大量数据。在某些操作中,我想读取表的当前滚动位置(水平轴和垂直轴)。这是我目前为止所尝试的
Playground

<template>
  <v-table fixed-header height="500px" ref="tableComponent">
    <thead>
      <tr>
        <th v-for="i in 20">
          Col {{ i }}
        </th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="i in 50" :key="i">
        <td v-for="j in 20" :key="j">
            <v-btn @click="logScrollPosition">X</v-btn>
        </td>
      </tr>
    </tbody>
  </v-table>
</template>

<script setup>
import { ref } from 'vue'

const data = ref([])
const tableComponent = ref()

function logScrollPosition() {
    const tableElement = tableComponent.value?.$el.querySelector("table"); 
  
  if(!tableElement){
    console.log("table missing");
    return;
  }
  
  console.log(tableElement.scrollLeft);
  console.log(tableElement.scrollTop);
}
</script>

滚动并单击按钮时,函数logScrollPosition始终记录两个轴的0。我的方法似乎缺少了一些东西。
你有任何想法如何检索滚动位置从tableComponent

1zmg4dgp

1zmg4dgp1#

您正试图直接从table元素获取滚动位置。但是,表组件的滚动发生在表的父容器内。若要确定滚动位置,您应该访问表的父容器。

function logScrollPosition() {
  const tableElement = tableComponent.value?.$el.querySelector(".v-table__wrapper");

  if(!tableElement){
    console.log("table missing");
    return;
  }
  console.log(tableElement.scrollLeft);
  console.log(tableElement.scrollTop);
}

相关问题