2

[true, true] のサイズを指定して famo.us サーフェスを作成し、それに任意の html コンテンツを配置した場合、オブジェクトのサイズを取得するクリーンな方法はありますか?

surface.getSize()同じものを返すだけ[true,true]

次のような明らかにプライベートなメソッドがいくつかあることに気付きましたが、 s._currTarget.clientHeight それらを使用するには手間がかかるようです!

4

3 に答える 3

2

サーフェスの実際のサイズを取得する最も簡単な方法は、 ですsurface.getSize(true)。Surface をサブクラス化する必要はありません。

ただし、サーフェスがまだ DOM にレンダリングされていない場合は、エラーが発生します。サーフェスがレンダリングされると、「デプロイ」イベントが発生します。次のように聞くことができます。

surface.on('deploy', function () {
    // Your Code Here
}.bind(this));

多くの場合、コードも でラップする必要がありますTimer.setTimeout()。これは、surface.getSize(true)メソッドが次のレンダリング サイクルよりも速く実行されるためです (1 秒あたり 60 フレームまたは 1 サイクルあたり約 16 ミリ秒)。最終的なコードは次のようになります。

// With the rest of your require statements
var Timer = require('famous/utilities/Timer');

surface.on('deploy', function () {
    Timer.setTimeout( function () {
        // Your code here
        // this.surface.getSize(true)
    }.bind(this), 16);
}.bind(this));

私も Famo.us は初めてですが、プロジェクトのいくつかの異なる状況でこの修正を実装する必要があり、完全に機能しているようです。

それがあなたのために働くかどうか私に知らせてください。

于 2014-07-22T05:23:45.920 に答える
2

に渡すtrueと、.getSize現在の DOM サイズが返されますSurface

surface.getSize(true)

于 2014-06-25T18:38:56.493 に答える