vue2 列表选中某个元素后,让滚动条滚动到指定区域

vue yekong

数据大屏 项目开发中,有一个组件因为元素过多需要滚动条显示,这里会有外部组件来激活某个元素,如果这个元素没有在可视区域的话,我们需要让滚动条滚动到对应的位置让激活的元素处于可视区域内。

要让滚动条让选中的项目处于可视区域,你可以使用 DOM 的 scrollIntoView 方法。首先,你需要为每个列表项添加一个 ref,然后在 selectItem 方法中,你可以获取到对应的 DOM 元素,并调用其 scrollIntoView 方法。

以下是一个示例:

<template>
  <!-- ... -->
  <div class="listBody">
    <div class="listBodyItem"
         :class="{ active: item.id === activeId }"
         @click="selectItem(item, index)"
         v-for="(item,index) in list" :key="index"
         :ref="`item-${index}`">
      <!-- ... -->
    </div>
  </div>
  <!-- ... -->
</template>

<script>
// ...
export default {
  // ...
  methods: {
    // ...
    selectItem(item, index) {
      this.activeId = item.id;
      this.$emit('getId', item.id);
      this.$emit('getList', this.list);
      this.$nextTick(() => {
        this.$refs[`item-${index}`][0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
      });
    },
  }
}
</script>

在这个示例中,我们首先为每个列表项添加了一个 ref,其值为 item-${index}。然后,在 selectItem 方法中,我们使用 this.$refs[item-${index}].scrollIntoView({ behavior: 'smooth', block: 'nearest' }); 来让滚动条滚动到选中的项目。$nextTick 是用来确保 DOM 已经更新。

喜欢