【问题标题】:scrollIntoView() not scrolling node to top of treescrollIntoView() 不将节点滚动到树的顶部
【发布时间】:2019-04-30 21:32:45
【问题描述】:

scrollIntoView() 函数有问题。 我有一棵树和两个按钮:

  1. 首先将树滚动到底部节点
  2. 第二个将树滚动到顶部节点

我不知道我应该怎么做这个滚动操作总是将节点滚动到树的顶部。我的意思是关于这个小提琴的情况:

http://jsfiddle.net/presto41/xzb62pw5/8/

如果您单击按钮#button1 (Scroll to bottom node),则树将滚动到底部节点 - 但底部节点不会位于树的顶部。它的工作方式是“仅显示节点。完成”。

我希望在这种情况下滚动到底部节点将作为滚动到顶部节点:

  1. 点击#button1 (Scroll to bottom node)
  2. 点击#button2 (Scroll to top node)
  3. topNode 在树的顶部

有什么想法吗?我试图通过options 操纵这个scrollIntoView() 函数,但要么我做错了,要么它不能按我预期的那样工作。


编辑:我不明白为什么有人在这个问题上给我减分。我 做了一个研究,我试图自己解决这个问题,我 清楚地描述我的问题。很烦人。


编辑 2:我没有这些节点的 ID。我只有节点 Fancytree.FancytreeNode 对象所以我需要一个无需操作的解决方案 在节点 ID 上。


编辑 3:这是我的伪代码,与原版最相似: http://jsfiddle.net/presto41/xzb62pw5/27/

【问题讨论】:

    标签: javascript jquery scroll fancytree


    【解决方案1】:

    我找到了解决方案。 解决方案是函数:

    function expandAndScrollTo(node) {
           node.setExpanded(true).then(()=>{
           node.span.scrollIntoView({behavior:'smooth', inline:'start'});
      });}
    

    【讨论】:

    • 谢谢,node.scrollIntoView() 除了 node.span.scrollIntoView() 成功了
    【解决方案2】:

    scrollIntoView() 的用途是将 id="content" 的元素滚动到浏览器窗口的可见区域:

        var el = document.getElementById("content");
        el.scrollIntoView();
    

    你可以使用

        function scrollToBottom(){
           var eldiv = document.getElementById("content");
           eldiv.scrollTop = div.scrollHeight - div.clientHeight;
        }
        function scrollToTop(){
           var eldiv = document.getElementById("content");
           eldiv.scrollTop = 0;
        }
    

    【讨论】:

    • 我没有这些节点的ID。我只有节点作为 Fancytree.FancytreeNode 对象,所以我需要一个无需对节点 ID 进行操作的解决方案。
    • @Presto 请提供您的伪代码。我相信向上/向下滚动的方法是一样的。
    • 我在 Edit 3 上添加了它。
    猜你喜欢
    • 2011-07-12
    • 2013-06-21
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多