scrollTo不滚动到正确的位置

问题描述:

我试图使用jQuery.scrollTo手风琴插件(其中一个块扩展后单击它和另一个合同),但它不滚动到正确的位置。scrollTo不滚动到正确的位置

这里是一个演示:pelmeshkin.com/temp/scrolltoaccoridon

正如你所看到的,第一次点击滚动正确,但每下一次更进了一步比它应该。

它似乎使用目标的初始位置(它在扩展/收缩之前),这是有道理的,因为两个事件都是同时启动的,但即使我尝试暂停scrollTo并等到slideUp/slideDown转换完成后,它仍然表现相同。 :(

好吧,我有点解决它自己。我第一次发现在页面加载的所有可点击元素的位置使用偏移(),把它们放在数组,然后喂它们作为像素值scrollTo上单击事件。

通过这种方式,我们将scrollTo精确的像素位置滚动到页面上,而不是依靠它来从元素ID本身进行计算。以下是最终结果:pelmeshkin.com

+1

altCognito的回答仅仅是对我在问题中已经提到的内容进行了回复,但没有实际的解决方案。由于没有更多的答案,我至少提供了一种可能的解决方案,可以帮助那些遇到同样问题并找到这篇文章的人。或者是否有一个关于接受自己的答案的计算器上的规则? – pelmeshkin 2009-05-09 15:30:49

因为它是根据动画出现之前的位置来计算位置。不知道你会怎么处理这个事情,说实话,除了修补内部计算这可能不是一件简单的事情。

+0

谢谢!是的,我不认为我想深入了解:)也许,我可以先滚动,然后通过回调扩展/缩小,但我不确定如何将“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'}); 

新年快乐。

+0

...但你的解决方案确实工作...所以谢谢:) – 2009-12-29 16:05:11