dynatree - 如何滚动到活动节点?

时间:2012-01-20 08:03:08

标签: javascript jquery dynatree jquery-dynatree

我有固定高度和垂直滚动条的dynatree。

node.activate();选择我正在搜索的节点,但不会移动垂直滚动条,所以我必须手动滚动才能看到活动节点。

如何以编程方式滚动它?


感谢mar10,我解决了这个问题:

var activeLi = node.li;
$('#tree').animate({
    scrollTop: $(activeLi).offset().top - $('#tree').offset().top + $('#tree').scrollTop()
}, 'slow');

3 个答案:

答案 0 :(得分:8)

Dynatree没有内置的scrollTo功能。 但是,一旦有了想要显示的DOM元素,就应该可以使用现有的方法和插件之一。

在您的情况下,您似乎已经拥有node个对象,因此您可以使用<li>或{{1}获取关联的<span>node.li代码}。

通常,您可以通过调用

随时获取活动节点
node.span

然后获取关联的DOM元素:

var node = $("#tree").dynatree("getActiveNode");
// or
var node = $("#tree").dynatree("getTree").getActiveNode();

或处理激活事件:

var activeLI = node && node.li;

获得元素后,请使用标准方法:

Scroll to a div using jqueryjQuery scroll to elementHow to scroll to an element in jQuery?, ...

修改2014-05 Fancytree 2.0开始,autoScroll已添加为标准选项。

答案 1 :(得分:5)

我遇到了类似的问题,并且无法像上面的示例中所述那样使用scrollTop工作。我通过更改&#39;#tree&#39;中的选择器来修复它。到&#39; .dynatree-container&#39;:

$('.dynatree-container').animate({ // animate the scrolling to the node
  scrollTop: $(activeLi).offset().top - $('.dynatree-container').offset().top + $('.dynatree-container').scrollTop()
}, 'slow');

这应该让你去,并节省几个小时的挫折(:

顺便说一句,我使用的是dynatree版本1.22和jquery 1.8.3以及jquery ui 1.9.2。

答案 2 :(得分:0)

当您在页面上有多个树时使用$('。dynatree-container')时出现问题,因为这将尝试选择具有此类的每个树。我有很多树,所以我需要选择具有特定id的树...但我发现,与前一个人一样,试图通过其id(例如'#tree')选择树是行不通的。那么......会是什么?做类似= $(“#prevPageTree”)。dynatree(“getTree”)。偏移也不起作用......

几分钟后:好的,弄清楚如何做到这一点。在Chrome调试器中进行处理显示.dynatree-container类实际上附加到&lt; ul&gt; dynatree在#tree元素下插入的元素,用于初始化dynatree实例。所以你需要做一些像

这样的事情
$("#tree ul").animate({ // animate the scrolling to the node
     scrollTop: $(activeLi).offset().top - $('#tree ul').offset().top + $('#tree ul').scrollTop()
}, 'slow');

如果像我一样,你不希望它将节点向右滚动到窗口顶部,那么

scrollTop: $(activeLi).offset().top - $('#prevPageTree ul').offset().top + $('#prevPageTree ul').scrollTop() - 150

很好地将你的节点放下150像素