Tôi nghĩ vấn đề của bạn là thay đổi giá trị $('#footer').offset().top
sau khi tải nhận xét không đúng ý kiến của bạn. Vì vậy, bạn cần phải cập nhật footerTop
(và limit
dựa trên giá trị footerTop
mới) sau khi nhận xét của bạn tải hoặc mỗi khi sự kiện của bạn kích hoạt.
cái gì đó như:
$(function(){ // document ready
if ($('#sticky').length) { // make sure "#sticky" element exists
var el = $('#sticky');
var stickyTop = $('#sticky').offset().top; // returns number
var stickyHeight = $('#sticky').height();
$(window).scroll(function(){ // scroll event
var limit = $('#footer').offset().top - stickyHeight - 20;
var windowTop = $(window).scrollTop(); // returns number
if (stickyTop < windowTop){
el.css({ position: 'fixed', top: 0 });
}
else {
el.css('position','static');
}
if (limit < windowTop) {
var diff = limit - windowTop;
el.css({top: diff});
}
});
}
});
Như với hầu hết các trường hợp, có một plugin jQuery cho điều này, như julianm chỉ ra trong bình luận của mình, sẵn here. Nó cũng hỗ trợ giá trị nút, để dừng hộp dính ở bất kỳ vị trí mong muốn nào.
Cảm ơn, hiện tại nó đang hoạt động. Nghĩ rằng đó là, nhưng với các trình duyệt khác nhau, nó bỏ qua giới hạn và cuộn qua chân trang. Dường như làm việc một lần khi bạn xóa bộ nhớ cache hoặc làm mới trang, sau đó không cho mỗi lần xem lặp lại. Bất kỳ ý tưởng? Đây là một ví dụ trên trang web http://thecomeupbmx.net/videos/red-bull-empire-of-dirt-practice-edit/ (không phải của tôi, tôi chỉ làm việc trên đó) –
Tôi cần một số loại của trường hợp thử nghiệm cho điều này mà luôn luôn thất bại. Nó có thể là các trình duyệt bộ nhớ đệm các js cũ nhưng tôi không thể tái sản xuất này. – 19greg96
Plugin jQuery này https://github.com/AndrewHenderson/jSticky (Tôi đã thấy nó trong một trong những nhận xét của ví dụ trước được cung cấp bởi Mike Jonas) đã làm chính xác những gì tôi đang tìm kiếm. Nó hỗ trợ một giá trị stopper (có thể là một lớp, ID hoặc thậm chí là một giá trị số) để dừng hộp dính ở bất kỳ vị trí mong muốn nào. – julianm