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:对不起,我没有完全理解这个问题。我明白了。我错了。谢谢