淘汰抵消价值

时间:2015-03-20 16:06:40

标签: jquery html knockout.js

我正在尝试编写一个基于这个问题滚动到列表元素的函数:

Scroll a list item such that it becomes visible?

我在Knockout应用程序中遇到了很多困难,最终我发现了原因。这是两个具有相同goToByScroll功能的小提琴:

http://jsfiddle.net/CaptainLexington/tNhLa/57/

http://jsfiddle.net/CaptainLexington/5wZQ2/108/

function goToByScroll(selector) {
    // Scroll
    $('ul#parent').animate({
        scrollTop: $(selector).position().top
    },
        'slow');
}

在第一个小提琴中,HTML是硬编码的,滚动功能正常。乌拉!

在第二个小提琴中,列表项由Knockout生成。滚动功能的行为很愚蠢。打开控制台并单击每个列表项,您将发现原因:jQuery.offset()。top值似乎与它们实际位置的关系非常小。在硬编码版本中,offset()。top值单调递增;在Knockout版本中,它们是任意的或周期性的。

那么,有什么方法可以解决这个问题吗?这是Knockout中的错误还是实现其功能的不幸但不可避免的副作用?是值得向Knockout报告,还是应该为我的应用决定其他功能?

1 个答案:

答案 0 :(得分:1)

这实际上是我的错;我无法理解如何解释偏移/位置数据(滚动后我期望它是一致的)我收到了。我还设法让我的功能在我的原始应用程序中完全按预期工作,但我不知道如何或我将改变它做什么。