2012-08-29 8 views
9

私は「サブナビゲーション」をしたいサイトを持っています。したがって、セクションにスクロールすると、そのツールバーがメインツールバーの下に貼り付けられます。私はこれを働かせていますが、私は初期化後にトップオフセットを変更することはできません。Twitterのブートストラップ変更着座オフセット

affix('refresh')

When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:

が、私はこれをしようとすると、私が手::ドキュメントは言う。ここ

Uncaught TypeError: Object # has no method 'refresh'

は私のコードです:

$(function() { 
    $('.sec-nav').addClass("affix-top"); 
    var adjustNavs = function (first) { 
     $('.sec-nav').each(function(){ 
      var $p = $(this).closest('.sec'); 
      var $$ = $p.prevAll('.sec'); 
      console.log($$); 
      var h = 0; 
      $$.each(function() { h+=$(this).outerHeight();}); 
      console.log(h); 

      if (first) { 
       $(this).affix({offset: {top: h}}); 
      } else { 
       $(this).data('affix', {b: {options: {offset:{top: h}}}}); 
       console.log(this); 
       $(this).affix('refresh') 
      } 

     }); 
    } 
    adjustNavs(true); 
    $('.sec').bind('DOMSubtreeModified', function() { 
     adjustNavs(); 
    }); 
}); 

私は

   $(this).data('affix', {b: {options: {offset:{top: h}}}}); 
の異なるバリエーションを試してみました

を含む:

   $(this).affix({offset: {top: h}}); 

オフセットを変更することができません。 affixプラグインのオフセットをどのように変更しますか?ありがとう。

+1

HTMLブロックを貼り付けることはできますか?それ以外の場合は特に言いにくいです... $( '。sec-nav')を置き換えようとすると、$( '。sec-nav')でaddClass( "affix-top"); 'affix();'それはまったく助けになりますか?または '.sec-nav'にすでに' data-spy = "affix"属性がありますか? –

答えて

20

私はそれを理解しました。代わりに、動的にオフセットを更新するので、私は、関数にオフセット値を変更:

$(function() { 
    $('.sec-nav').addClass("affix-top").each(function(){ 
     var $self = $(this); 
     var offsetFn = function() { 
      var $p = $self.closest('.sec'); 
      var $$ = $p.prevAll('.sec'); 
      var h = 0; 
      $$.each(function() { h+=$(this).outerHeight();}); 
      return h; 
     } 
     $self.affix({offset: {top: offsetFn}}); 
    }); 
}); 

は今、DOMの操作やウィンドウサイズ直しによるセクションの変更、オフセットを自動に起因する機能に変更されたときに変化する値を返します。

+0

華麗なアイデア! – viniciusnz

+2

使用したhtmlや実例を提供できますか?私はこれを私の既存のコードに取り込もうとしていますが、私は.secが何か分かりません。 – davecave

+1

ウィンドウ上で試行しています '$( '。myMeny')。接尾辞({offset:{top:myOffet}});では動作しませんでしたが、値は変化しませんでした – sreginogemoh

2

私は、より基本的なケースのためにFatmuemooの答えを少し簡略化しました: 私のホームページのナビゲーションバー(デフォルトのブートストラップ#masthead)は、#bgの大きな背景スライダの下に座っています。スライダーの高さは3 cssのブレークポイントによって異なります。 #mastheadのオフセットをスライダの高さに設定します。簡単!

$('header#masthead').affix({ //sticky header at bottom of bg 
     offset: { 
      top: function(){return $("#bg").outerHeight();} 
     } 
    }); 
+0

ありがとう、シンプルで効率的、素晴らしい作品と必要なすべての要素の合計を作成するのは簡単です。 – EPurpl3

関連する問題