I've created a sticky sidebar for my blog, but now I need the sticky element to stop scrolling when I reach the footer. The reason is because the sidebar is overlapping the elements in the footer. How can I solve this?
Working fiddle with overlapping problem:
https://jsfiddle.net/j7x5hLy3/
This is EXACTLY what I'm trying to achieve:
https://abouolia.github.io/sticky-sidebar/examples/basic.html
Look what happens when the sidebar reaches the bottom. I AM NOT TRYING TO USE Z-INDEX. I'm saying this because in some other questions people are posting "solutions" that uses z-index. I'm not trying to hide anything, I'm trying to make it stop scrolling when it reaches the footer.
jQuery(document).ready(function($) {
function isScrolledTo(elem) {
var docViewTop = $(window).scrollTop(); //num of pixels hidden above current screen
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top; //num of pixels above the elem
var elemBottom = elemTop + $(elem).height();
return ((elemTop <= docViewTop));
}
var catcher = $('#bannernormal');
var sticky = $('#bannerfixo');
if ($(window).width() >= 100) {
$(window).scroll(function() {
if (isScrolledTo(sticky)) {
sticky.css('position', 'fixed');
sticky.css('top', '0px');
}
var stopHeight = catcher.offset().top + catcher.height();
if (stopHeight > sticky.offset().top) {
sticky.css('position', 'absolute');
sticky.css('top', stopHeight);
}
});
} else {
$(window).unbind('scroll');
}
});
#bannernormal {
margin: auto;
display: table;
width: 200px;
height: 400px;
border: 1px solid #000;
margin: 5px;
}
#bannerfixo {
margin: 5px;
width: 200px;
height: 400px;
border: 1px solid #000;
margin: 5px;
}
#sidebar {
float: left;
}
#content {
float: right;
}
#footer {
display: block;
clear: both;
}
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<div id="content">
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
Content <br><br><br><br><br><br><br><br>
</div>
<div id="sidebar">
<div id="bannernormal">
This is the "catcher" <code>div</code>
</div>
<div id="bannerfixo" style="position: absolute; top: 413px;">
This is the "sticky" <code>div</code>
</div>
</div>
<div id="footer">Everything should stop before this part.
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
1010101010101011010<br/>
</div>