Basically on my site I have a sticky nav that has a transparent background. Below that I have light or dark colored content divs.
What I'm trying to achieve is as you scroll, a javascript function is actively determining if the sticky nav is on top of a light or dark content div, based on that div's classname (or a data attribute, whichever), and changing the color of the text in the sticky nav so it's visible over the content div.
Fiddle
Currently I don't have any javascript started as I don't know how to detect if one div is over another. But as you can see, once the sticky nav is over a dark content div I need to change the font color to a lighter color, and once it's back over a light content div I need to change the color to a darker color.
Example HTML:
<div id="sticky">Menu</div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
Thanks in advance!
Basically on my site I have a sticky nav that has a transparent background. Below that I have light or dark colored content divs.
What I'm trying to achieve is as you scroll, a javascript function is actively determining if the sticky nav is on top of a light or dark content div, based on that div's classname (or a data attribute, whichever), and changing the color of the text in the sticky nav so it's visible over the content div.
Fiddle
Currently I don't have any javascript started as I don't know how to detect if one div is over another. But as you can see, once the sticky nav is over a dark content div I need to change the font color to a lighter color, and once it's back over a light content div I need to change the color to a darker color.
Example HTML:
<div id="sticky">Menu</div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
Thanks in advance!
Share Improve this question asked Dec 4, 2014 at 16:09 CoreyCorey 2,5736 gold badges41 silver badges67 bronze badges 1- This may be of use: stackoverflow./questions/19661108/… – Hywel Rees Commented Dec 4, 2014 at 16:27
2 Answers
Reset to default 4Fiddle working:
http://jsfiddle/bbazcyc8/1/
var stickyOffset = $("#sticky").offset();
var $contentDivs = $(".content");
$(document).scroll(function() {
$contentDivs.each(function(k) {
var _thisOffset = $(this).offset();
var _actPosition = _thisOffset.top - $(window).scrollTop();
if (_actPosition < stickyOffset.top && _actPosition + $(this).height() > 0) {
$("#current").html("Current div under sticky is: " + $(this).attr("class"));
$("#sticky").removeClass("light dark").addClass($(this).hasClass("light") ? "light" : "dark");
return false;
}
});
});
<div>
<div id="sticky">Menu <span id="current"></span></div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
<div class="content dark"></div>
<div class="content light"></div>
</div>
kabooya, everyone. I found this for you: http://jsfiddle/Niffler/z34cG/
Try adding this
$(window).scroll(function() {
/* get current scroll-position within window */
var scroll = $(window).scrollTop();
$('.mainLeft li').each(function() {
/* get position of navigation-element (distance from top minus half of it's height, so that it changes color while it's half over black and half over white background) */
var elementPositionTop = parseFloat($(this).offset().top) + (parseFloat($(this).height() / 2));
/* change color for each background-change */
if (elementPositionTop >= 320 && elementPositionTop <= 640 || elementPositionTop >= 960 && elementPositionTop <= 1280) {
$(this).addClass('whiteText');
} else {
$(this).removeClass('whiteText');
}
});
});