2017-08-03 90 views
0

我试图检测类是否当前在视口中可见。我正在使用这个answer(无法回复我的问题)。原来的文章使用ID而不是类,我已经改变它来检测一个名为.white-section的类,它在页面中重复。检查带类的元素是否在视口中可见

目前它只能检测到第一个.white-section,我怎么才能在它们进入视口时检测它们?

$('#content').scroll(function() { 
    var top_of_element = $(".white-section").offset().top; 
    var bottom_of_element = $(".white-section").offset().top + $(".white-section").outerHeight(); 
    var bottom_of_screen = $(window).scrollTop() + $(window).height(); 
    var top_of_screen = $(window).scrollTop(); 

    if((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)){ 
     $('.header-container').addClass('.alt-menu'); 
    } 
    else { 
     $('.header-container').removeClass('.alt-menu'); 
    } 
}); 

这是HTML是如何设置:

<div class="header-container"></div> 

<div class="white-section"></div> 
<div class="white-section"></div> 
<div class="white-section"></div> 
<div class="white-section"></div> 
<div class="white-section"></div> 
+2

怎么办白部分涉及到头部容器?我最初的想法是这将涉及到每个白色部分。 – Taplar

+0

@Taplar对不起,我应该清楚这一点。当我滚动到一个白色部分时,它将一个类添加到标题容器中,并在它不在白色部分时将其删除 – Rob

+1

因此,标题容器是白色部分的子项? – Taplar

回答

1

给下面的一个尝试。它循环遍历元素以尝试找到与条件匹配的任何内容,如果有的话,它会添加该类。我还为解决方案添加了一些轻微的限制,并且还缓存了查找,以便滚动事件更快。

(function($) { 
 
    var scrollingIsThrottled = false; 
 
    var $allWhiteSections = $(".white-section"); 
 
    var $window = $(window); 
 
    var $headerContainer = $('.header-container'); 
 

 
    $('#content').scroll(function() { 
 
    if (!scrollingIsThrottled) { 
 
     scrollingIsThrottled = true; 
 

 
     var $whiteSpaceMatchingExpression = $allWhiteSections.filter(function() { 
 
     var $this = $(this); 
 
     var top_of_element = $this.offset().top; 
 
     var bottom_of_element = $this.offset().top + $this.outerHeight(); 
 
     var bottom_of_screen = $window.scrollTop() + $window.height(); 
 
     var top_of_screen = $window.scrollTop(); 
 

 
     return ((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)); 
 
     }); 
 
     
 
     if ($whiteSpaceMatchingExpression.length) { 
 
     $headerContainer.addClass('alt-menu'); 
 
     } else { 
 
     $headerContainer.removeClass('alt-menu'); 
 
     } 
 
     
 
     scrollingIsThrottled = false; 
 
    } 
 
    }); 
 
}(jQuery));

+0

辉煌,效果很好,非常感谢! – Rob

相关问题