2012-05-19 29 views
6

Tôi muốn lấy nó sao cho div cuối cùng trên thanh bên của tôi vẫn dính khi cuộn trang, nhưng dừng ở chân trang. Tôi có nó gần như làm việc với một online tutorial, nhưng tính toán messes lên khi disqus ý kiến ​​tải và nó chỉ đi đến một điểm nhất định.Dừng thanh lề bên lề ở chân trang (gần như đang hoạt động)

Đây là phiên bản đang hoạt động http://jsfiddle.net/k56yR/1/, nhưng có cách nào dễ dàng để làm điều gì đó như tính chiều cao chân và sau đó yêu cầu dừng để cuộn cách xa phần dưới của trang?

Trả lời

14

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.

+0

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 đó) –

+0

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

+0

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

Các vấn đề liên quan