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

rus*_*ego 11 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');
Run Code Online (Sandbox Code Playgroud)

mar*_*r10 8

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

在您的情况下,您似乎已经有了一个node对象,因此您可以使用或获取关联<li><span>标记.node.linode.span

通常,您可以通过调用随时获取活动节点

var node = $("#tree").dynatree("getActiveNode");
// or
var node = $("#tree").dynatree("getTree").getActiveNode();
Run Code Online (Sandbox Code Playgroud)

然后获取关联的DOM元素:

var activeLI = node && node.li;
Run Code Online (Sandbox Code Playgroud)

或处理激活事件:

onActivate: function(node) {
    var activeLI = node.li;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

使用jquery滚动到div, jQuery滚动到元素, 如何滚动到jQuery中的元素?,...

编辑2014-05Fancytree 2.0 开始,autoScroll作为标准选项添加.


Seb*_*ian 5

我有类似的问题,并且无法使scrollTop工作,如上例所述.我通过将选择器从'#tree'更改为'.dynatree-container'来修复它:

$('.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.