2012-03-24 9 views
1

jQuery Masonyの内部メソッドvarにアクセスする方法を教えてください。 私はlayoutメソッド内containerSizeプロパティをCONSOLE.LOGしているよ:jQueryの石積みのアクセスの内部メソッドvar

ライン177>query.masonry.js私は石工のinitの後containerSizeを取得する必要が

$('#container').masonry({ 
    itemSelector: '.box' 
}); 

console.log("here i need to retrieve the containerSize"); 

答えて

1

残念ながら、それはなしには不可能です実行時にスコープ外の変数の値にアクセスするために、コードを書き直すか、デバッガを使用します。

jQueryの石工ソースコードを読むと、containerSizeは "styleQueue"というオブジェクトデータメンバーにプッシュされます。残念ながら、これは後で処理されて空になり、このメンバーからのデータにアクセスしようとすると無意味になります。

http://jsfiddle.net/5hgsm/1/を見ると、石積みのデータには多くの有益な情報があることがわかります。 Google Chromeなどの適切なWebインスペクタを使用すると、データオブジェクトを調べてすべての子要素を表示できます。コンテナーサイズを得ることができるものが見つかる可能性が高いでしょう。

より抽象的なデータからcontainerSizeを計算するのではなく、コンテナの幅を直接取得し、サイズ変更アニメーションが完了した後にコンテナの幅を設定するだけです。次のように

これは、animationOptionsに「完全な」コールバックを添加することによって達成することができます。

$('#container').masonry({  
    isAnimated: true,  
    itemSelector: '.box',  
    columnWidth: 102,  
    gutterWidth: 0,  
    isFitWidth: true,  
    isResizable: true,  
    animationOptions: {   
     duration: 400,   
     easing: 'swing',   
     queue: false, 
     // Add complete callback here: 
     complete: function() { 
      // Resize site header, do other stuff if you want 
      $('#site-header').width($('#container').outerWidth()); 
     } 
    }  
}); 

これは、サードパーティのプラグインを変更、または他のデータからの幅を自分で計算する必要がなくなります。

+0

幅と高さを直接取得する例を更新しました:http://jsfiddle.net/5hgsm/2/ –

+0

ここからわかるように、containerSizeを取得して#header e#に渡す必要があります。 footer elmsを.boxコンテナと同じにするために:http://tinyurl.com/7fg7aa9今、私は202行目のハードコーディングに成功しました。http://tinyurl.com/8xt8vdh – Dee

+0

変更をハードコーディングするのは実際にはベストプラクティスではありませんソフトウェアライブラリに入れます。新しいバージョンに更新すると、すべての変更が失われます。以前のコメントで修正されたデモンストレーションが表示される場合は、.boxの幅と高さを取得する方法が表示されます。しかし、実際のコンテナの幅よりも後ろにいる場合は、単純に$( '#container')。outerWidth()を使用して、サードパーティのコードへの変更をハッキングすることによって起こりうる問題をすべて回避します。 –

関連する問題