2017-02-19 49 views
0

我使用jQuery在滾動後更改Bootstrap導航欄的CSS元素。我的問題是,如果你的頁面的頂部之後的任意位置加載頁面,菜單將不會直到你向下滾動變得更小 - 使用下面的代碼:如果不在頁面頂部,用jQuery更改CSS

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

基本上,您需要對scrollload事件都運行調整功能。 下面是一個例子:

(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')。 正如我所看到的,你調用時沒有任何指向'document'的指針,所以'this'指向'adjust'函數的實例。 您應該建議'$(function(){adjust.call(document);})'。 –

相關問題