2017-02-21 6 views
2

これは正しい動作だと思われますが、要素のoffsetTopの実際の値を取得するために何かできるかどうかは疑問です。display:noneの要素のoffsetTopプロパティは常に0です。

希望の動作は、選択された項目が上部に表示されるようにリストがスクロールされるボタンをクリックしたときです。要素が表示されている間は正常に機能しますが、非表示にすることができますユーザーが非表示にしてからリストが目的の項目にスクロールされるときに非表示になっても発生する動作。その要素がまだページにできるようになりますよう

HTML

<div id='list-wrapper'> 
    <ul> 
    <li id='one'>One</li> 
    <li id='two'>Two</li> 
    <li id='three'>Three</li> 
    </ul> 
</div> 

CSS

.list-wrapper { 
    display: none; 
    position: relative; 
    overflow-y: scroll; 
} 

JS

let listElement: Element = document.getElementById('list-wrapper'); 
let li3: Element = document.getElementById('three'); 
listElement.scrollTop = li3.offsetTop; 
+0

にそれを回避する方法は、それを切り替えることはキャッシュになりますエレメントが隠されている場合、エレメントを表示するまでスクロール操作を行います。 –

答えて

2

どちらかopacity: 0;またはその代わりvisilibility: hidden;要素を隠すために使用します通常は視覚的に隠されていました。

あなたは、あなただけのoffsetTop位置を取得するために、一時的にopacityまたはvisibilityを使用するように要素を切り替えることができますことを行うことができない場合 - その後、バックdisplay: none;

+0

はい、私はこれを考慮し、作業領域の配置方法と、要素が表示されていなくても文書内の同じ領域を占めるという事実を考慮して、他の項目のサイズをどのように計算するかについての主要なリファクタが必要になります。 – efarley

+0

@efarley表示されるまで、 'height'と' width'を '0'に設定するようなことができます。 –

+1

はいwidth:0トリックをやった!いい案。 – efarley

関連する問題