0

次のようopacityに変換するサーフェスを0作成する必要があります。1

stateModifier.setTransform(
  Transform.multiply(Transform.opacity(1), Transform.rotateX(0)), 
  { duration : 500, curve: Easing.inOutSine }
);

しかし、Transform.opacity存在しません。translateこれは基本的なことですが、またはのような他のプロパティで不透明度を変換する方法は知っていますrotate

http://famo.us/guides/animationsによると知っmodifierていますsetOpacity

アップデート

stateModifier.setOpacity翻訳やスケールなどの他のものと並行してアニメーション化できる非同期だと思いましたが、非同期ではありません。最初に発生し、次のアニメーションに移動します。それが私がこの質問をした理由です。

4

2 に答える 2

1

Modifier を 1 つだけ使用する方法の例を示す github リポジトリを作成しました。 https://github.com/thiswildorchid/famous-modifier-reuseですが、例としてここにコードを含めています。この例では、サーフェスをクリックするとアニメーションがトリガーされますが、好きな方法でトリガーできます。また、ここにフィドルがありますhttp://jsfiddle.net/orchid1/jd2q7r0v/1/

私は Tranform.rotateX を使用しましたが、任意の回転変換を使用できます。開始値のデフォルトを設定していることに注意してください。このアプローチの利点は、Modifier を 1 つだけ使用し、ModifierChain を必要としないことです。

    var Engine = require("famous/core/Engine"),
    Modifier = require("famous/core/Modifier"),
    Surface = require("famous/core/Surface"),
    Transitionable = require("famous/transitions/Transitionable"),
    Transform = require("famous/core/Transform");

var context, mod, surf, opacityTransform, rotateTransform;

context = Engine.createContext();

context.setPerspective(1000);

//the opacities starting value is 1
opacityTransform = new Transitionable(1);

//the starting rotation is an angle of zero
//you can console log Transform.identity to see the value but its basically an angle of 0
rotateTransform = new Transitionable(Transform.identity);


//very basic modifier here
mod = new Modifier({
    size: [100, 100],
    origin: [0.5, 0.5],
    align: [0.5, 0.5]
});

//very simple surface
surf = new Surface({
    content: "Hello World",
    properties: {
        border: "1px red solid",
        textAlign: "center",
        lineHeight: "100px"
    }
});

//gotta add everything to the context
context.add(mod).add(surf);

//here I tell the modifier to transform using my custom transitionables transforms
mod.transformFrom(rotateTransform);
mod.opacityFrom(opacityTransform);


//for illustration purposes I used a click event but trigger it any way you like 
surf.on("click", function () {

    //you can add an easing function here if you would like and even a callback as the 3rd argument
    //more importantly here you see I set the opacity to 0 and the rotation to the new angle I want
    opacityTransform.set(0, {duration: 1000});
    rotateTransform.set(Transform.rotateX(1.4), {duration: 1000});
});
于 2014-12-20T22:29:27.580 に答える
1

質問を更新した後、あなたが探しているものをよりよく理解できたと思います。以下は、不透明度、サイズ、原点をすべて同時に変更するコードです。うまくいけば、私が以前に提供したものよりも良い答えです. もちろん、これはここで機能するフィドルであることがわかります

var chainSurface = new Surface({
  size:[200,200],
  properties: { backgroundColor: 'green'}
})

chainSurface.chain = new ModifierChain();

chainSurface.state = new StateModifier({ origin:[0.5,0.5] });
chainSurface.sizeState = new StateModifier();
chainSurface.fadeState = new StateModifier();

chainSurface.chain.addModifier(chainSurface.fadeState);
chainSurface.chain.addModifier(chainSurface.sizeState);
chainSurface.chain.addModifier(chainSurface.state);

mainContext.add(chainSurface.chain).add(chainSurface);

chainSurface.on('click', function(){
  transition = {duration:1000,curve:Easing.inOutQuad};

  chainSurface.fadeState.setOpacity(0,transition);
  chainSurface.sizeState.setTransform(Transform.scale(0.5,0.5,1),transition);
  chainSurface.state.setOrigin([0.5,0],transition);
});
于 2014-12-18T22:29:19.427 に答える