「scrollSpy」タイプの関数を構築しようとしています。引数をオブジェクト内のいくつかの値と比較し、(数値的に) 最も高い値の名前を返す方法がわかりません。
私はいくつかのマークアップを持っています:
<ul class="nav">
<li><a href="a"></a></li>
<li><a href="b"></a></li>
<li><a href="c"></a></li>
<li><a href="d"></a></li>
<li><a href="e"></a></li>
<li><a href="f"></a></li>
</ul>
<section id="a" class="scrollspy"></section>
<section id="b" class="scrollspy"></section>
<section id="c" class="scrollspy"></section>
<section id="d" class="scrollspy"></section>
<section id="e" class="scrollspy"></section>
<section id="f" class="scrollspy"></section>
section
そして、それぞれとその上からの距離 (px) で構成されるオブジェクトを作成するスクリプト:
var obj = {
sectionOffset: {},
scrollSpy: function (scrolled) {
// This should look in the object with the offset values, and from all
// the values that (scrolled) is higher than, take the largest, and
// return its name.
}
}
$(function () {
$(window).scroll(function () {
obj.scrollSpy($(document).scrollTop());
});
// Create an object consisting of all elements I want to 'spy' on.
// Names and values are made of element ID and top offset respectively.
$('.scrollspy').each(function () {
obj.sectionOffset[$(this).attr('id')] = (parseInt($(this).offset().top));
});
});
必要な要素をループすると、次のようなオブジェクトが生成されます。
{
d: 5195,
b: 3245,
a: 1319,
f: 5682,
c: 2139,
e: 3343
}
明確にするために、ユーザーがページを 3000px 下にスクロールすると、関数は を返す必要がありますc
。