Search code examples
javascriptjqueryscrolloffset

Adding offset().top amount on scroll


I have a fixed piece of text and I'm trying to add a different class each time the text enters a div on scroll. I've got it working no problem. But if I add an offset amount to the fixed text e.g.

top: 400px

I need to counter this offset in the JS. But I can't seem to figure it out. I've tried using:

.offset().top 400);

But it's not working. Here's a code i'm currently using:

HTML

<p class="text">TEXT HERE</p>

<div class="section1"></div>
<div class="section2"></div>
<div class="section3"></div>
<div class="section4"></div>

JS

$(window).scroll(function (event) {
   var scroll = $(window).scrollTop();
   $('.text').toggleClass('blue',
      scroll >= $('.section1').offset().top
   );
   $('.text').toggleClass('magenta',
     scroll >= $('.section2').offset().top
   );
   $('.text').toggleClass('green',
     scroll >= $('.section3').offset().top
   );
   $('.text').toggleClass('orange',
     scroll >= $('.section4').offset().top
   );
});
//trigger the scroll
$(window).scroll();//ensure if you're in current position when page is refreshed

The text needs to add class as soon as it enters the relevant div.

Here's a working fiddle: http://jsfiddle.net/6PrQW/334/


Solution

  • So you did most everything right, but I think where you went wrong is here: var scroll = $(window).scrollTop();

    You don't want to calculate using the window offset, rather you want to use the offset of your sticky text. So instead use: var scroll = $('.text').offset().top;

    Let me know if that helps.

    edit, and here is your fiddle with the edits. Note that I edited your line for setting the blue class since you don't want to match the sticky offset against itself.