Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时在famo.us中使用#render方法_Javascript_Famo.us - Fatal编程技术网

Javascript 何时在famo.us中使用#render方法

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修饰符=新修饰符(

在famo.us中,有一些简单的方法可以使用曲面上的修改器执行动画/交互。例如,在famo.us指南中,拖动和设置曲面动画有非常直接的示例

…假设上面的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-through
render
方法,该方法只调用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()
    不过,我的主要问题是,它是否是处理协调动画的适当机制,因此我仍在寻找更多。