2015-07-08 3 views
0

У меня есть боковая панель, в которой я хочу стать позицией: исправлено; и цепляться за нижнюю часть экрана, но только после прокрутки всего div.Как сделать div фиксированным, как только полная высота прокручена?

Деление должно прокручиваться как нормальное относительно его родителя, а затем фиксироваться, когда нижняя часть этого div соответствует нижней части окна браузера. Я пытаюсь достичь боковой панели, например, this.

Я наткнулся на кусок JS-online, который я включил в свой Demo, но не был отличным с JS. Я даже не уверен, что я поступаю правильно. &, похоже, не может заставить его работать ,

$(document).ready(function() { 
    var s = $(".sidebar"); 
    var pos = s.offset().top+s.height(); //offset that you need is actually the div's top offset + it's height 
    $(window).scroll(function() { 
    var windowpos = $(window).scrollTop(); //current scroll position of the window 
    var windowheight = $(window).height(); //window height 
    if (windowpos+windowheight>pos) s.addClass('stick'); //Currently visible part of the window > greater than div offset + div height, add class 
     else s.removeClass('stick'); 
    }); 
}); 

Update: мне нужно JS, чтобы обнаружить, когда весь элемент в поле зрения, а затем сделать его фиксированным со дна. Или, точнее, когда нижняя часть элемента попадает в нижнюю часть окна.

Любая помощь или руководство будут оценены.

+0

вы, безусловно, в правильном направлении, я заметил, некоторые незначительные css проблемы в вашем коде –

+0

Хорошо спасибо, что посмотрели, не могли бы вы объяснить, где я ошибаюсь? – user2498890

ответ

0

Как я уже сказал, вы находитесь в правильном направлении. Я сделал незначительные изменения в ваши JS и CSS

JsFiddle Here

JS код:

$(document).ready(function() { 
    var s = $(".sidebar"); 
    var sideBarBottomY = s.offset().top+s.height(); 


    $(window).scroll(function() { 
     var windowTopY = $(window).scrollTop(); 
     if (windowTopY>sideBarBottomY){ 
      s.addClass('stick'); 
     }else{ 
      s.removeClass('stick'); 
     } 
    }); 
}); 
+0

Спасибо за ваш ответ, это довольно нервный способ сделать его более плавным? Также моя боковая панель дополняется 200px, это вызовет проблемы? – user2498890

+0

@ user2498890 jumpy as in, когда боковая панель приклеивается к нижней части, тело сдвигается влево? –

+0

Не беспокойно, как на боковой панели, прыгает на дно, тогда как я хочу, чтобы он цеплялся за нижнюю часть, когда нижняя часть боковой панели встречает нижнюю часть браузера. Вы видите, что я имею в виду? Я думаю, это потому, что я не хочу, чтобы смещение было вершиной, я хочу, чтобы это было дном, если это имеет смысл? – user2498890

0

это что-то вроде этого? JSFiddle

Код:

$(document).ready(function() { 
    var h = $(".header"); 
    var s = $(".sidebar"); 
    var f = $(".footer"); 
    var startat = h.offset().top+h.height(); 
    s.css({top: startat+"px",height: s.height()+"px"}); 
    var pos = s.offset().top+s.height(); //offset that you need is actually the div's top offset + it's height 
    var endat = f.offset().top; 

    $(window).scroll(function() { 
     var endat = f.offset().top; 
     var footer_height = f.height(); 
     var windowpos = $(window).scrollTop(); //current scroll position of the window 
     var windowheight = $(window).height(); //window height 

     if ((windowpos+windowheight)>pos && (windowpos+windowheight)<endat){ 
      s.css({top: "",height: ""}); 
      s.addClass("stick").removeClass("reston"); 
      s.css({bottom: ""}); 
     } else if((windowpos+windowheight)>endat){ 
      s.css({bottom: footer_height+"px"}); 
     } 
     else { 
      s.css({top: startat+"px",height: s.height()+"px"}); 
      s.removeClass("stick").addClass("reston"); 
      s.css({bottom: ""}); 
     } 
    }); 
}); 

Вы могли бы добавить некоторые CSS, как анимация для плавной прокрутки эффекта врезки.

или используя непосредственно верхний атрибут положения и нажмите scrollTop и ждать как раз перед «сноской», как «еще, если»

наилучших пожелания

+0

Привет, спасибо за ваш ответ.Нет, в основном боковая панель должна начинаться дальше по странице, и когда вы прокручиваете вниз, она будет выглядеть как основной контейнер, а затем, когда нижняя часть боковой панели будет соответствовать нижней части браузера, она должна стать фиксированной. Очень жаль, если это не имеет смысла, его трудно объяснить. – user2498890

Смежные вопросы