美文网首页
ant-design树搜索后,如何滚动定位到选中的树节点

ant-design树搜索后,如何滚动定位到选中的树节点

作者: 黎明的叶子 | 来源:发表于2022-06-21 14:45 被阅读0次

前提:树节点比较多,屏幕展示不全。(不管节点是否为异步,定位要等到节点渲染处理才执行)
第一种方法:(简单方便)
只要子节点选中,都会默认展开父节点。 在设置完节点选中展开的回调里面设置定位。

this.setState({
      iframeUrl: selectTabPane.url,
      tabPaneActiveKey: selectTabPane.key,
      selectedKey: selectTabPane.key,
      expandedKeys: [selectTabPane.key],
      autoExpandParent: true,
      currentProjectId: selectTabPane.currentProjectId
    }, () => {
      document.getElementsByClassName('ant-tree-treenode-selected')[0].scrollIntoView()
    })
// 1.因treenode并不能真正的加id来获取dom,所以这里通过className读取
// 2.scrollIntoView()为原生的方法。Element 接口的 scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

第二种方法:这个不适用于tree,因为里面的定位需要用到ID。但是作为知识储备可以了解一下。
参考:一个hook搞定React项目中的平滑滚动
这个是用hook写的,我若用类组件class直接引用是不行的。将hook写的组件再次封装成函数组件,然后直接调用。
代码如下:

import React, { useState,  useRef,forwardRef, useImperativeHandle } from 'react';
import ReactDOM from 'react-dom';
import useSmoothScroll from 'react-smooth-scroll-hook'; 

// 封装的函数组件
const Container = forwardRef((
  props,
  ref, 
) => { 
  const itemref = useRef(null);
  const { scrollTo } = useSmoothScroll({
    ref:itemref,
    speed: 100,
    direction: 'y',
  }); 
  useImperativeHandle(ref, () => ({ 
    scrollTo
  }))
  
  return (
    <div ref={itemref}
    style={{
      overflowY: 'scroll',
      maxHeight: '200px',
    }}> 
      {props.children}
    </div>
  )
})
// 应用
class Parent extends React.Component{
  constructor(props) {
    super(props)
    this.containerRef = React.createRef()
  }
   test = () => { 
     this.containerRef.current.scrollTo('#item-20')
  }
  render() {
    return <div>
    <button onClick={this.test}>scrollTo('#item-20')</button>
      <Container ref={this.containerRef} >
      <>
          {/* <button onClick={this.test}>scrollTo('#item-20')</button> */}
          {/* {这里是个树不可以 treeNode 并没有真正的给每个node加ID。所以通过ID定位应该是不行的 */}
        <div  
        >
          {Array(100)
            .fill(null)
            .map((_item, i) => (
              <div key={i} id={`item-${i}`}>
                item-{i}
              </div>
            ))}
        </div>  
      </>
      </Container>
  </div>
  }
}

相关文章

  • 算法简记- BST相关

    1、// 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 701. 二叉搜索树中的插入操作

    题目描述 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 二叉树的插入操作

    题目描述:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 701. Insert into a Binary Search

    给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 ...

  • 如何判断一颗二叉树是二叉搜索树(BSTree)

    对于如下一颗树,如何判断它是否符合搜索二叉树 首先,要明白搜索二叉树的特点:1,根节点的所有左节点的值小于根节点,...

  • BST二叉搜索树

    二叉搜索树(BST) 定义 二叉搜索树又叫二叉排序树,相对于普通的二叉树,二叉搜索树规定父节点的左子节点小于父节点...

  • 夭寿了!面试官:你来手写一个AVL平衡二叉搜索树

    二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点...

  • 数据结构之二叉搜索树(Binary Search Tree)

    二叉树搜索树 每个节点最多含有两个子树的树称为二叉树;二叉树搜索树对于任意一个节点均满足: 所有位于左子树的节点值...

  • 数据结构-二分搜索树

    二叉树:顾名思义就是每个节点都只能有两个子节点的树结构 二分搜索树 二分搜索树也是二叉树 二分搜索树的每个节点的值...

  • 19-前驱节点和后继节点

    一、前驱节点 二、后继节点 代码以二叉搜索树为例: 三、完善二叉搜索树代码,remove只针对二叉搜索树 删除代码...

网友评论

      本文标题:ant-design树搜索后,如何滚动定位到选中的树节点

      本文链接:https://www.haomeiwen.com/subject/oxcuvrtx.html