2017-02-19 10 views
0

Я использую jQuery для изменения элементов CSS на панели навигации Bootstrap после прокрутки. Проблема у меня в том, что при загрузке страницы в любом месте после того, как в верхней части страницы, в меню не будет получать меньше, пока вы не прокручивать вниз - на код ниже:Изменить CSS с помощью jQuery, если не в верхней части страницы

var a = $(".nav").offset().top; 

$(document).scroll(function(){ 
    if($(this).scrollTop() > a) 
    { 
     $('.navbar-fixed-top').css({"background":"#fff"}); 
     $('.navbar-fixed-top').css({"transition":"0.5s"}); 
     $('.navbar-fixed-top li a').css({"padding-top":"20px"}); 
     $('.navbar-fixed-top li a').css({"padding-bottom":"20px"}); 
    } else { 
     $('.navbar-fixed-top').css({"background":"transparent"}); 
     $('.navbar-fixed-top').css({"transition":"0.5s"}); 
     $('.navbar-fixed-top li a').css({"padding-top":"40px"}); 
     $('.navbar-fixed-top li a').css({"padding-bottom":"40px"}); 
    } 
}); 

Я пытался изменения это так, что если он не находится в верхней части страницы, он выполнит код scrollTop, но не повезет.

+0

Это звучит, как вы можете искать [способ проверить позицию на странице в JQuery] (http://stackoverflow.com/a/17441121/2341603). –

ответ

0

Ваша функция выполняется только в качестве слушателя событий, так что вы должны запустить его вручную первым. Попробуйте этот код:

var a = $(".nav").offset().top; 

function scrollListener(){ 
    if($(document).scrollTop() > a) 
    { 
     $('.navbar-fixed-top').css({"background":"#fff"}); 
     $('.navbar-fixed-top').css({"transition":"0.5s"}); 
     $('.navbar-fixed-top li a').css({"padding-top":"20px"}); 
     $('.navbar-fixed-top li a').css({"padding-bottom":"20px"}); 
    } else { 
     $('.navbar-fixed-top').css({"background":"transparent"}); 
     $('.navbar-fixed-top').css({"transition":"0.5s"}); 
     $('.navbar-fixed-top li a').css({"padding-top":"40px"}); 
     $('.navbar-fixed-top li a').css({"padding-bottom":"40px"}); 
    } 
}; 

$(document).scroll(scrollListener); 

scrollListener(); 
+0

К сожалению, это не сработало. Он загружается как то, что он должен быть только наверху. Изменения только при прокрутке вниз - но когда вы поднимаетесь, мимо точки, где вы загрузили, она возвращается в предыдущее меню. –

+0

Возможно, было бы лучше, чтобы меню всегда было меньше и только увеличивалось, если оно касалось вершины? –

+0

Не могли бы вы предоставить онлайн-демо? –

0

В принципе, вам необходимо запустить функцию регулировки как на scroll, так и на load событиях. Вот пример:

(function($) { 
    var a = $(".nav").offset().top; 

    var adjust = function() { 
     if($(document).scrollTop() > a) { 
      $('.navbar-fixed-top').css({"background":"#fff"}); 
      $('.navbar-fixed-top').css({"transition":"0.5s"}); 
      $('.navbar-fixed-top li a').css({"padding-top":"20px"}); 
      $('.navbar-fixed-top li a').css({"padding-bottom":"20px"}); 
     } else { 
      $('.navbar-fixed-top').css({"background":"transparent"}); 
      $('.navbar-fixed-top').css({"transition":"0.5s"}); 
      $('.navbar-fixed-top li a').css({"padding-top":"40px"}); 
      $('.navbar-fixed-top li a').css({"padding-bottom":"40px"}); 
     } 
    } 

    $(document).scroll(adjust); 
    $(function() { adjust; }) 
})(window.jQuery); 
+0

Посмотрите на мое решение, ваша версия не имеет отношения к '$ (this) .scrollTop()' –

+0

Это то же самое решение, мой просто ждет, когда событие 'window.load' будет запущено и не загрязнит глобальное пространство имен ... – motanelu

+0

Попробуйте запустить свой код. У подписчиков событий есть указатель 'this' для прослушанного элемента (в данном случае это« документ »). Как я вижу, вы вызываете настройку без указателя на 'document', поэтому внутри этого указателя указывается экземпляр функции' adjust'. Вместо этого вы должны указать '$ (function() {adjust.call (document);})'. –