我是Dojo的新手,所以这可能有些愚蠢,这使我很难受。

我有以下代码(删除了不相关的内容):

define(["dojo/_base/declare", "dojo/fx", "dojo/on"],
    function (declare, fx, on) {
        return declare(null, {
            executeTransition: function (continuation) {
                var animation = fx.combine([
                    fx.slideTo({
                        duration: 1200,
                        node: this.node1, // node1 will be a valid node at the moment of execution
                        left: -this.node1.offsetWidth
                    }),
                    fx.slideTo({
                        duration: 1200,
                        node: this.node2, // node2 will be a valid node at the moment of execution
                        left: 0
                    })
                ]);

                on(animation, "End", continuation);

                animation.play();
            }
        });
    }
);


当按原样执行我的代码时,on行无法显示Uncaught Error: Target must be an event emitter。但是作为动画,它应该已经成为事件发射器了吗?

我确实尝试解决一些背景问题:

reference guide to dojo.fxfx.combine的结果视为其他动画。 API reference for dojo.fx仅声明它返回一个实例。

无论如何,Dojo 1.8 animation tutorial具有与我尝试执行的示例相同的示例,不同之处在于,它稍后将fx.combine的结果包装在fx.chain中(我不需要-或者我可以吗?)。

因此,我的问题是:使用Dojo 1.8,如何并行运行两个动画并在完成后执行一些代码?

最佳答案

阅读您的问题后,我决定进行调查。我发现,“目标必须是事件发射器”错误仅在尝试从组合动画中捕获onEnd事件时发生。对于链接的动画,不会发生这种情况。

经过一番挖掘后,我注意到组合的动画似乎具有_connects属性,这表明它正在使用旧的折旧的"dojo/_base/connect"功能。这可能是Dojo中的错误(或者是最新升级中错过的代码)。看过Dojo Trac却没有发现任何东西,可能会为此打开新的票证。

我可以想到两种解决方法:


使用"dojo/_base/connect"

connect.connect(animation, "onEnd", function(){
    // connect == dojo/base/connect
})

直接连接到onEnd事件(或使用"dojo/aspect"

animation.onEnd(function(){
});



这两种方法都不是理想的,因为将来可能需要将代码更改为dojo/on版本。

编辑:看来其他人已经将此报告为错误,see here

关于javascript - 组合动画结束后如何执行 Action ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14737490/

10-16 19:22