我有固定高度和垂直滚动条的dynatree。
node.activate();选择我正在搜索的节点,但不移动垂直滚动条,所以我必须滚动manualy以查看活动节点。
我如何以编程方式滚动它?
感谢mar10,我解决了这个问题:
var activeLi = node.li;
$('#tree').animate({
scrollTop: $(activeLi).offset().top - $('#tree').offset().top + $('#tree').scrollTop()
}, 'slow');
Dynatree没有内置的scrollTo功能。
但是,一旦有了想要显示的DOM元素,就应该能够使用现有的方法和插件之一。
在你的情况下,你似乎已经有了 node
对象,所以你可以获得相关的 <li>
和 <span>
标签使用 node.li
要么 node.span
。
通常,您可以通过调用随时获取活动节点
var node = $("#tree").dynatree("getActiveNode");
// or
var node = $("#tree").dynatree("getTree").getActiveNode();
然后获取关联的DOM元素:
var activeLI = node && node.li;
或处理激活事件:
onActivate: function(node) {
var activeLI = node.li;
...
}
获得元素后,使用标准方法:
使用jquery滚动到div ,
jQuery滚动到元素 ,
如何滚动到jQuery中的元素? ,
...
编辑2014-05 从...开始 Fancytree 添加了2.0 autoScroll作为标准选项。
Dynatree没有内置的scrollTo功能。
但是,一旦有了想要显示的DOM元素,就应该能够使用现有的方法和插件之一。
在你的情况下,你似乎已经有了 node
对象,所以你可以获得相关的 <li>
和 <span>
标签使用 node.li
要么 node.span
。
通常,您可以通过调用随时获取活动节点
var node = $("#tree").dynatree("getActiveNode");
// or
var node = $("#tree").dynatree("getTree").getActiveNode();
然后获取关联的DOM元素:
var activeLI = node && node.li;
或处理激活事件:
onActivate: function(node) {
var activeLI = node.li;
...
}
获得元素后,使用标准方法:
使用jquery滚动到div ,
jQuery滚动到元素 ,
如何滚动到jQuery中的元素? ,
...
编辑2014-05 从...开始 Fancytree 添加了2.0 autoScroll作为标准选项。
我有类似的问题,并且无法使scrollTop工作,如上例所述。我通过将选择器从'#tree'更改为'.dynatree-container'来修复它:
$('。dynatree-container')。animate({//动画滚动到节点
scrollTop:$(activeLi).offset()。top - $('。dynatree-container')。offset()。top + $('。dynatree-container')。scrollTop()
}, '慢');
这应该让你去,并节省几个小时的挫折(:
顺便说一句,我使用dynatree版本1.22和jquery 1.8.3和jquery ui 1.9.2。
当您在页面上有多个树时使用$('。dynatree-container')时会出现问题,因为这将尝试选择具有此类的每个树。我有很多树,所以我需要选择具有特定id的树...但我发现,与之前的人一样,尝试通过其id(例如'#tree')选择树是行不通的。那么,会是什么......?做类似= $(“#prevPageTree”)。dynatree(“getTree”)。偏移也不起作用......
几分钟后:好的,弄清楚如何做到这一点。在Chrome调试器中进行浏览表明.dynatree-container类实际上附加到dynatree在用于初始化dynatree实例的#tree元素下插入的<ul>元素。所以你需要做类似的事情
$("#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像素