scrollTo不滚动到正确的位置
我试图使用jQuery.scrollTo手风琴插件(其中一个块扩展后单击它和另一个合同),但它不滚动到正确的位置。scrollTo不滚动到正确的位置
这里是一个演示:pelmeshkin.com/temp/scrolltoaccoridon
正如你所看到的,第一次点击滚动正确,但每下一次更进了一步比它应该。
它似乎使用目标的初始位置(它在扩展/收缩之前),这是有道理的,因为两个事件都是同时启动的,但即使我尝试暂停scrollTo并等到slideUp/slideDown转换完成后,它仍然表现相同。 :(
好吧,我有点解决它自己。我第一次发现在页面加载的所有可点击元素的位置使用偏移(),把它们放在数组,然后喂它们作为像素值scrollTo上单击事件。
通过这种方式,我们将scrollTo精确的像素位置滚动到页面上,而不是依靠它来从元素ID本身进行计算。以下是最终结果:pelmeshkin.com
因为它是根据动画出现之前的位置来计算位置。不知道你会怎么处理这个事情,说实话,除了修补内部计算这可能不是一件简单的事情。
谢谢!是的,我不认为我想深入了解:)也许,我可以先滚动,然后通过回调扩展/缩小,但我不确定如何将“this”对象传递给回电话。 像这样的东西不起作用: $ .scrollTo($(本),1000,函数(){// 扩大(本); // 合同(不是(这个)); }); – pelmeshkin 2009-04-20 00:27:44
伙计。 N.S.F.W.
,有点黑客周围Effect.ScrollTo后:
Effect.LazyScrollTo = function(element) { try {
var options = arguments[1] || { };
scrollOffsets = document.viewport.getScrollOffsets();
elementOffsets = $(element).cumulativeOffset();
if (options.offset) elementOffsets[1] += options.offset;
return new Effect.Tween(null,
scrollOffsets.top,
elementOffsets[1],
options,
function(p){
try {
this.lazy_offset = this.lazy_offset || $(element).cumulativeOffset();
scrollTo(scrollOffsets.left, (p.round() - (elementOffsets[1] - this.lazy_offset[1])));
} catch(e) {
alert(e);
}
}.bind(this)
);
} catch(e) { alert(e); }}
然后在别处......
new Effect.SlideDown('tab1-body', {queue: 'end'});
new Effect.LazyScrollTo('tab1-heading', {queue: 'end'});
新年快乐。
...但你的解决方案确实工作...所以谢谢:) – 2009-12-29 16:05:11
altCognito的回答仅仅是对我在问题中已经提到的内容进行了回复,但没有实际的解决方案。由于没有更多的答案,我至少提供了一种可能的解决方案,可以帮助那些遇到同样问题并找到这篇文章的人。或者是否有一个关于接受自己的答案的计算器上的规则? – pelmeshkin 2009-05-09 15:30:49