我是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.fx将
fx.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/