Javascript 将offset().top与对象属性进行比较
我正在尝试构建一个“scrollSpy”类型的函数。我不知道如何将参数与对象中的某些值进行比较,并返回(数字上)最大值的名称 我有一些建议:Javascript 将offset().top与对象属性进行比较,javascript,jquery,Javascript,Jquery,我正在尝试构建一个“scrollSpy”类型的函数。我不知道如何将参数与对象中的某些值进行比较,并返回(数字上)最大值的名称 我有一些建议: <ul class="nav"> <li><a href="a"></a></li> <li><a href="b"></a></li> <li><a href="c"></a></l
<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>
在我循环遍历我想要的元素后,它会生成一个对象,如:
{
d: 5195,
b: 3245,
a: 1319,
f: 5682,
c: 2139,
e: 3343
}
需要明确的是,如果用户向下滚动3000px页面,函数应该返回c
$('.scrollspy').each(function ()
{
if(($(this).offset().top + $(this).height()) > 0)
{
//this is the one you are looking for.
return false; //break the loop.
}
});
这将像scrollSpy一样工作,你确定吗?我在
$(window.scroll()
中运行了它,它为我提供了所有.scrollspy
元素。似乎您正在将每个元素的高度+偏移量与0进行比较。这没有多大意义。如果div的顶部不能通过滚动显示,它的顶部将为负值。因此,顶部+高度>0时,仍处于可见状态。不可见div的顶部+高度将小于零。所以第一个div(top+height)>0就是您需要的。这个想法很有趣,但是当我记录每个偏移量时,当我滚动时,值不会改变。不,这应该可以$(此).offset().top。更好的小提琴,你在尝试什么。不确定你为什么不相信我:-/。我要尝试将对象转换为数组,然后将其从最高到最低排序,并将滚动值与之进行比较。你帮我省去了麻烦,因为这很好用!干杯
$('.scrollspy').each(function ()
{
if(($(this).offset().top + $(this).height()) > 0)
{
//this is the one you are looking for.
return false; //break the loop.
}
});
scrollSpy: function (scrolled) {
var highest = 0, highestName = null;
// iterate through the offsets
$.each(obj.sectionOffset, function(name, val) {
// check that scrolled is higher than the value, and that it's the highest found so far
if (scrolled > val && val > highest) {
highest = val;
highestName = name;
}
});
return highestName;
}