Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 滚动时检测第一个顶部元素_Javascript_Jquery_Scroll_Offset_Detect - Fatal编程技术网

Javascript 滚动时检测第一个顶部元素

Javascript 滚动时检测第一个顶部元素,javascript,jquery,scroll,offset,detect,Javascript,Jquery,Scroll,Offset,Detect,滚动时如何检测第一个顶部元素(在窗口视图中可见) 像这样… $(window).scroll($.debounce(250,function(){ $('.box').removeClass('current').each(function() { //if(statement) { // $(this).addClass('current') //} }); })); 我以.. $(window).scroll($.debounc

滚动时如何检测第一个顶部元素(在窗口视图中可见)

像这样…

$(window).scroll($.debounce(250,function(){
    $('.box').removeClass('current').each(function() {
       //if(statement) {
       //  $(this).addClass('current')
       //}
    });
}));

我以..

$(window).scroll($.debounce(250,function(){
    $('.box').removeClass('current').each(function() {
       //if(statement) {
       //  $(this).addClass('current')
       //}
    });
}));
操场:

我不知道如何检测第一个框在顶部。

$(窗口)。滚动($.debounce(250,函数(){
$(window).scroll($.debounce(250, function(){
    var scrollTop = $(window).scrollTop();
    var $first;
    var firstPos;

    $('.box').each(function() {
            var $box = $(this).removeClass('current');
            var pos = $box.offset();

            if(pos.top > scrollTop && (!firstPos || pos.top < firstPos.top)){
                $first = $box;
                firstPos = pos;
            }
    });

     if($first){
        $first.addClass("current");   
     }
}));
var scrollTop=$(窗口).scrollTop(); var$第一; var-firstPos; $('.box')。每个(函数(){ var$box=$(this.removeClass('current'); var pos=$box.offset(); if(pos.top>scrollTop&(!firstPos | | pos.top
$(窗口)。滚动($.debounce(250,函数(){
var scrollTop=$(窗口).scrollTop();
var$第一;
var-firstPos;
$('.box')。每个(函数(){
var$box=$(this.removeClass('current');
var pos=$box.offset();
if(pos.top>scrollTop&(!firstPos | | pos.top

您可以使用.offset()查找顶部div

$(window).scroll($.debounce(250,function(){
    var top_one;
    var offset_top = 10000;
    $('.box').removeClass('current').each(function() {
        offset = $(this).offset();
        if(offset.top < offset_top){
            offset_top = offset.top;
            top_one = $(this);
        }
    });
    top_one.addClass('current');
}));
$(窗口)。滚动($.debounce(250,函数(){
var top_one;
var offset_top=10000;
$('.box').removeClass('current').each(function(){
偏移量=$(this.offset();
if(offset.top

您可以使用.offset()查找顶部div

$(window).scroll($.debounce(250,function(){
    var top_one;
    var offset_top = 10000;
    $('.box').removeClass('current').each(function() {
        offset = $(this).offset();
        if(offset.top < offset_top){
            offset_top = offset.top;
            top_one = $(this);
        }
    });
    top_one.addClass('current');
}));
$(窗口)。滚动($.debounce(250,函数(){
var top_one;
var offset_top=10000;
$('.box').removeClass('current').each(function(){
偏移量=$(this.offset();
if(offset.top


+1谢谢,但为什么检测“右一”框不起作用?@l2aelba抱歉,那应该是
偏移量
,而不是
位置
。更新。一些问题。如果我有1000盒?那么
.each()
函数呢?@l2aelba您可能想存储一些东西并引用它们,而不是在每个循环中重新查询。例如,您可以将
$(窗口)
存储一次,将
$(“.box”)
存储一次。另外,您可能应该在主循环中执行
.removeClass('current')
(如
$(this).removeClass(“current”)
,因为
.removeClass()
必须在内部循环,因此这是一种额外的处理。我之所以这么说,是因为窗口的滚动处理程序可能会频繁启动,而JS需要做很多事情time@l2aelba哈,是的,那个外部的
每个
都不是故意的。我的意思是只有一个。+1谢谢,但为什么要“第一个正确”框不起作用?@l2aelba抱歉,那应该是
偏移量
,而不是
位置
。更新。一些问题。如果我有1000个框,那么
。each()
函数呢?@l2aelba您可能想存储一些东西并引用它们,而不是在每个循环中重新查询。例如,您可以存储
$(窗口)
一次,和
$(.box”)
一次。此外,您可能应该在主循环内执行
.removeClass('current')
(如
$(此).removeClass(“current”)
,因为
.removeClass()
必须在内部循环,因此这是一种额外的处理。我之所以这么说,是因为窗口的滚动处理程序可能会频繁启动,而JS需要做很多事情time@l2aelba哈,是的,每个外部的
都不是我想要的。我的意思是只有一个。你测试过你的代码吗,还是只是把它放在小提琴和琴上k it?这对我根本不起作用-红色永远不会移动到不同的框中可能有点挑剔,但你真的不应该以
$
开头命名所有变量,这有点违背了目的。另外,不要“重新包装`jquery变量。
$($top\u one)
是对jquery的浪费调用。而且,这根本不起作用的原因是,您从未将元素的位置与窗口的滚动位置进行比较。因此,无论滚动位置如何,您总是选择页面上的第一个div。是的,通常情况下,变量名称开头的
$
表示它包含jquery对象。显然,这不是必需的,但这是一个正常的约定。我知道在PHP中,变量以
$
开头,但在PHP中通常不使用JS@Ian:对不起,我没有完全理解这个问题。我明白了。我的错误。谢谢。你到底是测试了你的代码还是把它放在一把小提琴里并链接起来?它对我根本不起作用-红色永远不会出现移动到另一个框可能有点挑剔,但您确实不应该以
$
开头命名所有变量,这有点违背了目的。另外,不要“重新包装`jquery变量。
$($top\u one)
是对jquery的浪费调用。而且,这根本不起作用的原因是,您从未将元素的位置与窗口的滚动位置进行比较。因此,无论滚动位置如何,您总是选择页面上的第一个div。是的,通常情况下,变量名称开头的
$
表示它包含jquery对象。显然,这不是必需的,但这是一个正常的约定。我知道在PHP中,变量以
$
开头,但在PHP中通常不使用JS@Ian:对不起,我没有完全理解这个问题。我明白了。我错了。谢谢