Pregunta anterior, pero recientemente me encontré con este problema y la solución aceptada aquí no funcionaría porque la altura de mis div no era la misma, así que en resumen aquí está la solución que encontré.
jsFiddle:http://jsfiddle.net/Lighty_46/27f4k/12/
$(document).ready(function() {
var bluebutton = $('#blue_link').offset().top - parseFloat($('#blue_link').css('marginBottom').replace(/auto/, 0));
var bluebuttonbottom = $('#blue_block_bottom').offset().top - $('#main_nav').height() - parseFloat($('#blue_link').css('marginBottom').replace(/auto/, 0));
$(window).scroll(function (event) {
// what the y position of the scroll is
var y = $(this).scrollTop();
// whether that's below the top of the div
if (y >= bluebutton) {
// if so, ad the fixed class
$('.home_nav').addClass('blue_selected');
}
// whether you have passed the bottom of the div
if (y >= bluebuttonbottom) {
// if so remove the selected class
$('.home_nav').removeClass('blue_selected');
} else {
// otherwise remove it
$('.home_nav').removeClass('blue_selected');
}
});
});
Así que, básicamente,
- $ ('# blue_link') era el div superior que quería para activar el cambio de clase
- $ ('# blue_block_bottom') era el div que quería desencadenar la eliminación de clase
- $ ('# main_nav') fue mi cabecera fija
Por eso, cuando el fondo de mi cabecera llega a la parte superior de la div, la clase "blue_selected" se aplica a ".home_nav" .. ... luego, si la parte inferior del div pasa la parte inferior del encabezado, la clase "blue_selected" se elimina de ".home_nav".
Usted tendrá que repetir esta operación para cada uno de los botones con las de sus respectivos div
he probado en Chrome, Firefox e IE 10 a 8 (funciona en 8 pero se rompe el violín ligeramente).
Espero que esto ayude, probablemente no sea la mejor manera de hacerlo con toda honestidad y probablemente tenga algunos errores allí, pero fue el único en el que trabajé.
Hey usted es impresionante, gracias tanto! Trataré de usar tu ejemplo como punto de partida para lo que intento hacer. :) – SamY
Use $ (ventana) .scroll() en lugar de $ ('body'). Scroll(). – pricco