Javascript 何时在famo.us中使用#render方法
在famo.us中,有一些简单的方法可以使用曲面上的修改器执行动画/交互。例如,在famo.us指南中,拖动和设置曲面动画有非常直接的示例Javascript 何时在famo.us中使用#render方法,javascript,famo.us,Javascript,Famo.us,在famo.us中,有一些简单的方法可以使用曲面上的修改器执行动画/交互。例如,在famo.us指南中,拖动和设置曲面动画有非常直接的示例 …假设上面的require(“”)语句。。。 var mainContext=Engine.createContext(); var draggable=新的draggable({…}); var曲面=新曲面({…}); var transitionableTransform=新的transitionableTransform(); var修饰符=新修饰符(
…假设上面的require(“”)语句。。。
var mainContext=Engine.createContext();
var draggable=新的draggable({…});
var曲面=新曲面({…});
var transitionableTransform=新的transitionableTransform();
var修饰符=新修饰符({
来源:[.5,5],
transform:transitionableTransform
});
表面。管道(可拖动);
曲面上('单击',函数(){
setScale([3,3,1],{duration:300});
});
mainContext.add(可拖动).add(曲面);
但是,在更复杂的场景中,您可能需要协调多个动画,根据交互情况根据需要启动/停止/反转。在这些情况下,像添加具有持续时间的转换这样简单的事情一开始可能会起作用,但不能保证用户与它们交互越多,就不会失去同步
#render方法似乎是放置某些类型的协调动画的常用方法。我对它的有限理解是,它标识正在渲染的节点的“规格”,并在渲染循环的每个帧上调用。因此,您可能能够识别特定动画的每个步骤,然后根据其与动画的交互方式,您可以停止中间动画并根据需要进行更改。
例如,Flipper似乎就是这样工作的
(src/views/Flipper.js):
Flipper.prototype.render=函数render(){
var pos=this.state.get();//状态是可传递的
变量轴=this.options.direction;
var frontRotation=[0,0,0];
var反向旋转=[0,0,0];
前向旋转[轴]=Math.PI*pos;
反向旋转[轴]=数学PI*(位置+1);
if(this.options.cull&&!this.state.isActive()){
if(pos)返回这个.backNode.render();
否则返回此.frontNode.render();
}
否则{
返回[
{
transform:transform.rotate.apply(null,frontRotation),
目标:this.frontNode.render()
},
{
transform:transform.rotate.apply(null,反向旋转),
目标:this.backNode.render()
}
];
}
};
是否有关于动画制作时渲染应扮演的角色的文档?或者render方法应该如何工作(例如,构造返回的规范的正确方法)。渲染应该是更低级的吗?如果是的话,应该使用不同的构造吗?到目前为止,我看到的
render
方法使用的唯一方法是从预先存在的元素返回规格。就我个人而言,我只在创建自己的“视图”时使用过它,我在类中添加了一个RenderNode,并创建了一个pass-throughrender
方法,该方法只调用RenderNode的render
方法。这就足以将自定义对象传递到。添加函数并使它们工作。我在这里了解到:
至于理解renderspec本身的构造,我不知道有任何文档。了解它的最好方法是阅读SpecParser
的\u parseSpec
函数:
由此看来,以下任何一项都可以用作RenderSpec
:
id(创建时分配给每个曲面
)
包含以下任何一项的对象:
不透明度
变换
origin
size
RenderSpec
s的数组
如果要控制渲染节点,请使用渲染
函数编写自定义视图
。Flipper
类是一个简单的例子(而RenderController
是这个模式的一个复杂例子)
名人堂的呈现方式:
每个RenderNode
都有一个render
函数,用于创建
renderSpec
李>
renderSpec
包含有关修改器的信息
或
曲面
2.1修饰符
规格用于计算最终的CSS
属性。
2.2表面
规范耦合到DOM
元素
使用RenderNode.commit
函数,每次勾选引擎
,都会呈现renderSpec
commit
函数使用ElementAllocator
(从上下文中)分配/取消分配DOM元素。(实际上是回收DOM节点以节省内存)。
因此:只需在自定义的视图中返回正确的renderSpec
,famo.us将为您管理内存和性能
注:
您不需要使用视图
类–具有渲染
功能的对象就足够了。视图
类只添加事件和选项,这是创建封装的、可重用组件的好方法
当在DOM中分配Surface
元素时,将触发deploy
事件
取消分配表面元素时,将触发调用事件
复制自感谢您的回复。我浏览了_parseSpec,得出了相同的结论,只是一个duck类型的对象,它描述了特定曲面的渲染需要如何进行。到目前为止,我基本上只是扩展了view,所以不需要显式地创建一个render方法(这样就不会遇到与您相同的需求,因为view有一个render方法,它可以执行您所说的操作-返回此操作。_node.render()
不过,我的主要问题是,它是否是处理协调动画的适当机制,因此我仍在寻找更多。