I'm trying to change the background-color
of my body
with jQuery, when a specific div (in my example the red one) is visible while scrolling. If the div is not visible, the background-color should change again with an animation. I tried follow, but it's not working. Here's also a codepen snippet: https://codepen.io/STWebtastic/pen/qpKdeo
$(window).scroll(function(){
$('.m-box--red').each(function(){
if(isScrolledIntoView($(this)) ){
$("html body").animate({ backgroundColor: "red" }, 300);
console.log('hello');
}
else{
$("html body").animate({ backgroundColor: "white" }, 300);
console.log('hello');
}
});
});
function isScrolledIntoView(elem){
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
body {
box-sizing: border-box;
margin: 0;
}
.m-box {
display: flex;
align-items: center;
padding: 10px;
background-color: #75989F;
margin-bottom: 100px;
cursor: pointer;
color: white;
transition: background-color 0.3s;
height: 300px;
}
.m-box--second {
background-color: #68808E;
}
.m-box--third {
background-color: #CDC2AA;
color: gray;
}
.m-box--red {
background-color: #D29B8E;
border: 1px solid lightgray;
}
.m-box__text {
font-size: 45px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="m-box">
<p class="m-box__text">Quisque velit nisi, pretium ut lacinia in, elementum id enim.</p>
</div>
<div class="m-box m-box--second">
<p class="m-box__text">Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Praesent sapien massa, convallis a pellentesque nec, egestas non nisi. Nulla porttitor accumsan tincidunt. Sed porttitor lectus nibh. Praesent sapien massa, convallis a pellentesque
nec, egestas non nisi.</p>
</div>
<div class="m-box m-box--red">
<p class="m-box__text">Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Donec sollicitudin molestie malesuada. Praesent sapien massa, convallis a pellentesque nec, egestas non nisi.</p>
</div>
<div class="m-box m-box--third">
<p class="m-box__text">Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Donec sollicitudin molestie malesuada. Praesent sapien massa, convallis a pellentesque nec, egestas non nisi.</p>
</div>
<div class="m-box">
<p class="m-box__text">Quisque velit nisi, pretium ut lacinia in, elementum id enim.</p>
</div>