Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将offset().top与对象属性进行比较_Javascript_Jquery - Fatal编程技术网

Javascript 将offset().top与对象属性进行比较

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

我正在尝试构建一个“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>
在我循环遍历我想要的元素后,它会生成一个对象,如:

{
    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;
}