非常に大きな結果ツリーを含む小さなスクロール可能な div があり、階層的にネストされ、巨大なインデントされたリストとして表示されます。ページの他の場所でオートコンプリートされた提案がクリックされたときに、その div をツリー項目の 1 つまでスクロールしたいと思います。問題は、スクロール可能な div 内でスクロールするオフセットを計算することです。ターゲットの上部とスクロール可能な div の上部の間の距離を取得する必要がありますが、いくつかの複雑な問題があります。
次のようなコードがあります。
$('#coltree').animate({
scrollTop: $node.offset().top - $('#coltree').offset().top
}, 800);
$ nodeはスクロール可能な div の ID で、スクロールしようとしている要素 ( divcoltree
内) を含む jQuery オブジェクトです。coltree
そして今、合併症。スクロール可能な div の上部とターゲット要素の上部の間の距離を取得する必要があります。上記で使用coltree
した方法は、 が上までスクロールされている場合にのみ機能します。たとえば、既に 1 つの要素にスクロールしている場合、別の候補をクリックするcoltree
と、ページに対して相対的にコンテンツが移動しているため、別の候補をクリックすると間違った場所にスクロールします。
ツリーの前後にコンテンツがあり、ツリーが何ページにも及ぶ可能性があるため、スクロール可能な div からツリーを取り出したくありません。ターゲットの直接の親ではないため、jQuery の.position()
メソッドを使用しても機能しません。coltree
任意の祖先に対する要素の垂直位置を取得または計算する方法が必要です。