1

非常に大きな結果ツリーを含む小さなスクロール可能な 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任意の祖先に対する要素の垂直位置を取得または計算する方法が必要です。

4

1 に答える 1

0

私が考え出した解決策はcoltree、別の div でラップし、そのラッパーをスクロール div にすることでした。ターゲット div とともに移動するようになったためcoltree、上記のようにオフセットを差し引くと、毎回正しい値が得られます。上記のコードに必要な唯一の変更は、スクロール可能なラッパーをアニメーション化することですcoltree

于 2012-12-21T15:00:43.443 に答える