リストのどの要素がページの一番上にあるかを把握する必要があります。私の解決策は、jQuery each を使用して要素をループし、位置を確認することです。
これは問題なく機能しますが、要素が多いとパフォーマンスが低下します。簡単な例については、このフィドルを参照してください
ここに私が気づいている奇妙なことがあります
- 時間がかかるのは position.top() への最初の呼び出しです
- Chrome (ほぼ 3 秒) と firefox (1 秒未満) で大きく異なる動作が見られます。
私がやろうとしていることに対するより良い解決策はありますか?
ここにコードがあります
<p>Log:
<div id="log">
</div>
</p>
Items:
<ul id="items">
</ul>
for (var i = 0; i < 10000; i++) {
$("#items").append("<li id='item_" + i + "'>" + i + "</li>");
}
var top = new Date().getTime();
$("li[id^='item_']").each(function() {
var start = new Date().getTime();
var top = $(this).position().top;
var end = new Date().getTime();
var time = end - start;
if (time > 1) {
$("#log").append($(this).attr('id') + ": " + time + "<br/>");
}
});
var bottom = new Date().getTime();
var overalltime = bottom - top;
$("#log").append("Overall Time: " + overalltime + "<br/>");