2014-04-11 14 views
4

我有一個包含大量元素的div,並且overflow: scroll。然後我想能夠滾動視圖中的第n個元素。我設置了一個小提琴,但我無法找到表達式來獲取相對於父項的元素位置。如何找到相對於它的父級的元素位置以將其滾動爲可見

http://jsfiddle.net/bortao/NXcTK/

我都嘗試el.position().topel.offset().top,但他們沒有工作。

注意:h/2是這樣的元素位於div的中間。

+0

問題是'cont.animate({scrollTop:(elementTop + h)});'。你想減去'h',而不是添加它。看起來你也可能想要添加元素高度的一半。所以,'cont.animate({scrollTop:(elementTop - h)});'。附:在這種情況下'el.position()。top'是正確的。 –

+0

@BryanDowning我做了這個,現在它的工作原理,但只有當滾動條在初始位置。 – ariel

+0

現在明白了,謝謝 – ariel

回答

7

好了......只需將當前的scrollTop()添加到它。

http://jsfiddle.net/bortao/NXcTK/1/

var cont = $("#container"); 
var el = $(cont[0].children[index]); 
var h = cont.height()/2; 
var elementTop = el.position().top; 
var pos = cont.scrollTop() + elementTop - h; 
cont.animate({scrollTop: pos}); 
1

對於更穩定的解決方案,無論將工作的offsetParent(其可以與position屬性的值改變)的,我會用偏移()而不是位置():

cont.animate({scrollTop: cont.scrollTop() + (el.offset().top - cont.offset().top)}); 
相關問題