2014-10-03 6 views
0

Мне нужна моя боковая панель для прокрутки вверх и вниз с окном, но остановитесь, когда div находится вверху или внизу. Приведенный ниже код работает, когда страница сначала загружается и прокручивается вниз, или когда страница прокручивается медленно, но когда страница прокручивается до самой нижней части div боковой панели, страница должна достигать вершины (а затем и некоторых) в чтобы вызвать изменение маржи.Переместить div с прокруткой окна не согласовано

Есть ли какой-нибудь другой триггер, который я должен искать, кроме как только на свитке? Как настроить этот код для правильной настройки div?

$(window).on("load scroll", function() { 
    var scrollYpos = $(document).scrollTop(); 
    var sidebarinfo = $("#sidebar").offset().top + $("#sidebar").height(); 
    var windowinfo = $(window).height() + $(window).scrollTop(); 
    if ((windowinfo)<(sidebarinfo)){ 
     $('#sidebar').css('margin-top', -scrollYpos); 
    } 
}); 

Боковая панель имеет фиксированное положение. Если я использую абсолютную позицию, div прокручивается отлично, но она не останавливается, когда нижняя часть div достигнута - она ​​просто продолжает прокручиваться с окном.


Я исправил основную часть проблемы с помощью этого кода.

$(window).on("load scroll", function() { 
    var sidebarinfo = $("#sidebar").scrollTop() + $("#sidebar").height(); 
    var windowinfo = $(window).innerHeight() + $(window).scrollTop(); 
    if ((windowinfo)<(sidebarinfo)){ 
     $('#sidebar').css('top', -($(window).scrollTop())); 
    } 
}); 

Единственная проблема заключается в загрузке страницы, на боковой панели застревает в неправильном положении, пока он не прокручивается весь путь (и более).

+0

Вам нужно будет сделать это 'позицию: абсолютная;', а затем прослушивать события прокрутки и каждый раз, который изменится, вам нужно будет отрегулировать положение, где бы ни находился верхний край окна. (Это на самом деле сложнее, поскольку вам нужно позволить ему спуститься с края, когда они прокручивают назад) –

ответ

0

я на самом деле понял, что мне нужно настроить несколько вещей и добавить предложение еще:

$(window).on("scroll", function() { 
    var scrollmargin = $(window).scrollTop() - $("#sidebar").outerHeight(); 
    var sidebarinfo = $("#sidebar").scrollTop() + $("#sidebar").outerHeight(); 
    var windowinfo = $(window).innerHeight() + $(window).scrollTop(); 
    console.log($(window).scrollTop()); 
    if ((windowinfo)<(sidebarinfo)){ 
     $('#sidebar').css('top', (sidebarinfo + scrollmargin)*-1); 
    } 
    else { 
     var margintop = $(window).innerHeight() - $("#sidebar").outerHeight(); 
     $('#sidebar').css('top', margintop); 
    } 
}); 
Смежные вопросы