Câu hỏi cũ nhưng gần đây tôi đã gặp phải vấn đề này và giải pháp được chấp nhận ở đây sẽ không hoạt động vì chiều cao của div của tôi không cố định, vì vậy trong ngắn hạn đây là giải pháp tôi đã gặp.
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');
}
});
});
SO về cơ bản,
- $ ('# blue_link') là div đầu tôi muốn để kích hoạt sự thay đổi lớp
- $ ('# blue_block_bottom') là div tôi muốn kích hoạt loại bỏ lớp học
- $ ('# main_nav') là tiêu đề cố định của tôi
Vì vậy, khi phía dưới tiêu đề của tôi đạt đến đỉnh của div, lớp "blue_selected" được áp dụng cho ".home_nav" .. ... sau đó nếu phần dưới của div vượt qua phần dưới cùng của tiêu đề thì lớp "blue_selected" bị xóa khỏi ".home_nav".
Bạn sẽ cần phải lặp lại điều này cho mỗi nút của bạn với div tương ứng của họ
Tôi đã thử nghiệm nó trong Chrome, Firefox và IE 10-8 (công trình trong 8 nhưng vỡ fiddle hơi). Hy vọng điều này giúp, nó có lẽ không phải là cách tốt nhất để làm điều đó trong tất cả sự trung thực và nó có thể có một số lỗi trong đó một nơi nào đó nhưng nó là người duy nhất tôi đã làm việc.
Nguồn
2013-04-05 14:47:29
Hey bạn tuyệt vời, cảm ơn rất nhiều! Tôi sẽ cố gắng sử dụng ví dụ của bạn làm điểm khởi đầu cho những gì tôi đang cố gắng làm. :) – SamY
Sử dụng $ (cửa sổ) .scroll() thay vì $ ('body'). Scroll(). – pricco