如何定位el-tree中的树节点当父元素滚动时如何定位子元素

使用到的方法

Element 接口的 scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

参数

alignToTop可选

一个布尔值:

如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的 scrollIntoViewOptions: {block: "start", inline: "nearest"}。这是这个参数的默认值。

如果为 false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的 scrollIntoViewOptions: {block: "end", inline: "nearest"}。

scrollIntoViewOptions 可选 实验性

一个包含下列属性的对象:

behavior 可选

定义滚动是立即的还是平滑的动画。该选项是一个字符串,必须采用以下值之一:

smooth:滚动应该是平滑的动画。

instant:滚动应该通过一次跳跃立刻发生。

auto:滚动行为由 scroll-behavior 的计算值决定。

block 可选

定义垂直方向的对齐,start、center、end 或 nearest 之一。默认为 start。

inline 可选

定义水平方向的对齐,start、center、end 或 nearest 之一。默认为 nearest。

详细参考mdn传送门

测试效果图

点击按钮快速定位到子节点

测试代码

javascript 复制代码
<!-- eslint-disable eqeqeq -->
<!-- eslint-disable no-undef -->
<template>
  <div>
    <div style="width: 200px;height: 200px;overflow: auto;">
      <el-tree :data="data" node-key="id" default-expand-all :props="defaultProps">
        <span slot-scope="{ node, data }">
          <span :id="data.id">{{ node.label }}</span>
        </span>
      </el-tree>
    </div>
    <el-button type="primary" style="margin-top: 100px;" @click="handleClick">主要按钮</el-button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: [{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: '一级 2',
          children: [{
            id: 5,
            label: '二级 2-1'
          }, {
            id: 6,
            label: '二级 2-2'
          }]
        }, {
          id: 3,
          label: '一级 3',
          children: [{
            id: 7,
            label: '二级 3-1'
          }, {
            id: 8,
            label: '二级 3-2'
          }]
      }, {
          id: 4,
          label: '一级 4',
          children: [{
            id: 9,
            label: '二级 4-1'
          }, {
            id: 10,
            label: '二级 4-2'
          }]
      }, {
          id: 5,
          label: '一级 5',
          children: [{
            id: 11,
            label: '二级 5-1'
          }, {
            id: 12,
            label: '二级 5-2'
          }]
      }],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  async mounted() {
  },
  methods: {
    handleClick(){
      let node = document.getElementById('10')
      this.$nextTick(()=>{
        node.scrollIntoView()
      })
    }

  },

}
</script>

<style lang="scss" scoped></style>
相关推荐
夏幻灵3 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
Lvan的前端笔记3 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
程序猿编码4 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
三天不学习4 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs194055 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光5 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
明月_清风6 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
码云数智-园园6 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言