我有固定高度和垂直滚动条的dynatree。
node.activate();选择我正在搜索的节点,但不会移动垂直滚动条,所以我必须手动滚动才能看到活动节点。
如何以编程方式滚动它?
感谢mar10,我解决了这个问题:
var activeLi = node.li;
$('#tree').animate({
scrollTop: $(activeLi).offset().top - $('#tree').offset().top + $('#tree').scrollTop()
}, 'slow');
答案 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 jquery, jQuery scroll to element, How 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像素