Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS 4.0.7 scrollTo()滚动,但不';不移动滚动条滑块?_Extjs_Extjs4 - Fatal编程技术网

ExtJS 4.0.7 scrollTo()滚动,但不';不移动滚动条滑块?

ExtJS 4.0.7 scrollTo()滚动,但不';不移动滚动条滑块?,extjs,extjs4,Extjs,Extjs4,我有一个树面板,并试图做一个动画滚动到某些位置。我在做这样的事情: myTreePanel.getView().getEl().scrollTo('top', yCoord, true /*animate*/); 视图会滚动到正确的位置,但滚动条中的“滑块”不会移动。你知道为什么吗 一些附加信息:如果我改为执行以下操作,滚动条滑块将正确移动(当然,scroll()不支持动画--我更喜欢使用.scrollTo(),以便用户可以看到滚动): 谢谢你的帮助/建议 这并不奇怪。他们使用。正确的代码是:

我有一个树面板,并试图做一个动画滚动到某些位置。我在做这样的事情:

myTreePanel.getView().getEl().scrollTo('top', yCoord, true /*animate*/);
视图会滚动到正确的位置,但滚动条中的“滑块”不会移动。你知道为什么吗

一些附加信息:如果我改为执行以下操作,滚动条滑块将正确移动(当然,scroll()不支持动画--我更喜欢使用.scrollTo(),以便用户可以看到滚动):

谢谢你的帮助/建议

这并不奇怪。他们使用。正确的代码是:

myTreePanel.verticalScroller.setScrollTop(yCoord);

但是,它也不支持动画。因此,我建议像我所描述的那样去掉自定义滚动条,并使用您的原始代码。

@molecleman关于禁用自定义滚动条的建议(ExtJS在4.0.x中使用,但在4.1中不使用)确实有效。完成此操作后,您可以调用myTreePanel.getView().getEl().scrollTo('top',yCoord,true),一切都按预期工作:滚动设置动画,滚动条移动。唯一的问题是,如果使用向上/向下箭头键在树中移动,似乎会破坏视图的滚动能力

它不是很优雅,但我要使用的是:

// Animated scroll of tree view
myTreePanel.getView().getEl().scrollTo('top', yCoord, true);

// Wait 300ms then sync the scroll bar with the tree view
setTimeout(function() {
    myTreePanel.setScrollTop(yCoord);
}, 300);
这样做的缺点是滚动条“跳跃”到位,而不是随着动画平滑移动,但好处是不会破坏上/下键滚动。此外,因为它不涉及更改配置参数或重写树视图的样式,所以我假设它在升级到ExtJS 4.1后仍然可以工作(即,对setScrollTop()的计时器调用将是不必要的,但不应该破坏任何东西)

请注意,调用setScrollTop()会移动滚动条,但也会导致视图“跳转”到该位置。因此,您需要确保计时器在动画完成之前不会启动。实际上,我使用一些自定义代码每10毫秒轮询一次,查看目标行是否可见,然后调用setScrollTop(),而不是使用总是等待硬编码时间的计时器:

var scrollToRowNum = 5;
var scrollToEl = getElementForNode(myTreePanel.getRootNode().childNodes[scrollToRowNum]);
var yCoord = scrollToEl.getOffsetsTo(scrollToEl.parent())[1];

// Animated scroll of tree view
myTreePanel.getView().getEl().scrollTo('top', yCoord, true);

// Check every 10ms to see if animation is done, then sync scrollbar
var timerId = setInterval(function() {
    if( myTreePanel.isTreeElementWithinVisibleArea(scrollToEl) ) {
        clearInterval(timerId);
        myTreePanel.setScrollTop(yCoord);
    }
}, 10);
函数的作用是:检查元素当前的Y坐标(绝对坐标)是否在树状视图框的顶部和底部之间

var scrollToRowNum = 5;
var scrollToEl = getElementForNode(myTreePanel.getRootNode().childNodes[scrollToRowNum]);
var yCoord = scrollToEl.getOffsetsTo(scrollToEl.parent())[1];

// Animated scroll of tree view
myTreePanel.getView().getEl().scrollTo('top', yCoord, true);

// Check every 10ms to see if animation is done, then sync scrollbar
var timerId = setInterval(function() {
    if( myTreePanel.isTreeElementWithinVisibleArea(scrollToEl) ) {
        clearInterval(timerId);
        myTreePanel.setScrollTop(yCoord);
    }
}, 10);