滚动到特定 div 类时更改 div 颜色

Posted

技术标签:

【中文标题】滚动到特定 div 类时更改 div 颜色【英文标题】:Change div color when scrolling to a specific div class 【发布时间】:2021-04-20 17:58:29 【问题描述】:

在滚动时添加背景颜色时遇到问题。目前我的代码正在运行,但直到我滚动到 div 的末尾才显示。这是background-overlay

我想在滚动背景覆盖类时激活黑色类。另一个问题是当我滚动过去的 div 类没有删除。我的以下代码有什么遗漏吗?

https://jsfiddle.net/e6tfgs0a/2/

片段代码:

$(function() 
  $(window).scroll(function() 
    var scroll = $(window).scrollTop();

    if (scroll >= $('.background-overlay').offset().top)  // check the offset top
        $( ".background-overlay" ).addClass( "black" );
        
     else if(scroll >= $('.background-overlay').offset().top+$('.background-overlay').height()) // check the scrollHeight
        $( ".background-overlay" ).removeClass( "black" );
    
  );
);
.full-height, .page 
  height:500px;


.black 
  background: #000000; 
    transition: background-color 1s ease;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page">
    
  </div>
  
  <section class="full-height background-overlay" >
    </section>
  
  <div class="page">
   
  </div>

【问题讨论】:

【参考方案1】:

此外,要扩展 Spring's answer,您也可以将 .scrollTop() 用于 background-overlay 部分:

$(function() 
  $(window).scroll(function() 
    var scroll = $(window).scrollTop();

    if (scroll >= $('.background-overlay').scrollTop())  // <-- changed this
        $( ".background-overlay" ).addClass( "black" );
        
     else if(scroll >= $('.background-overlay').scrollTop()+$('.background-overlay').height()) // check the scrollHeight
        $( ".background-overlay" ).removeClass( "black" );
    
  );
);
.full-height, .page 
  height:500px;


.black 
  background: #000000; 
    transition: background-color 1s ease;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page">
    
  </div>
  
  <section class="full-height background-overlay" >
    </section>
  
  <div class="page">
   
  </div>

【讨论】:

【参考方案2】:

如果我理解您的问题,第一个条件检查将是您的 div 的 offsettop - height,第二个条件是条件错误(条件 iversion),

还将过渡添加到您 .background-overlay 而不是 .black 将在上下滚动时都有效果

$(function() 
  $(window).scroll(function() 
    var scroll = $(window).scrollTop();
    var $divBlack = $('.background-overlay');
    
    if (scroll >= $divBlack.offset().top - $divBlack.height())  // check the offset top
      $divBlack.addClass("black");

     else if (scroll <= $divBlack.offset().top + $divBlack.height())  // check the scrollHeight
      $divBlack.removeClass("black");
    
  );
);
.full-height,
.page 
  height: 500px;
  border-bottom: 1px solid black;


.black 
  background: #000000;


.background-overlay 
  transition: background-color 2s ease;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page">


</div>

<section class="full-height background-overlay">

</section>
<div class="page">



</div>

【讨论】:

以上是关于滚动到特定 div 类时更改 div 颜色的主要内容,如果未能解决你的问题,请参考以下文章

滚动到并制作 Div Flash?

Firefox 在 div 滚动条上移动时触发拖动事件

如何滚动到特定的div? [复制]

如何滚动到特定的div? [复制]

如何滚动到 iframe 中的特定 div?

网页中如何让DIV在网页滚动到特定位置时出现