【发布时间】:2014-07-22 20:59:53
【问题描述】:
为了弄清楚如何从 SpriteSheet 启动和停止 Sprite 动画,我尝试了以下方法:
// other code...
// define animations in SpriteSheet:
"animations": {"intro": [0, 19, "false"]}
// other code...
var spriteSheet = new createjs.SpriteSheet(data);
var intro = new createjs.Sprite(spriteSheet, "intro");
stage.addChild(intro);
createjs.Ticker.addEventListener("tick", stage);
intro.stop();
var btnStart = document.getElementById("btnStart");
btnStart.onclick = function() {
console.log("btnStart clicked");
intro.on("animationend", onStartAnimEnd);
intro.play();
};
function onStartAnimEnd(e) {
intro.removeEventListener("animationend", onStartAnimEnd);
console.log("Start anim ended");
}
在上面的示例中,如果用户单击 btnStart 按钮,onStartAnimEnd 回调会无限期触发,即使通过在动画配置中定义“false”来表示我们想要在最后一帧停止,动画实际上确实如此停止,和我在回调的第一行删除事件监听器。
如果我添加:
function onStartAnimEnd(e) {
intro.removeEventListener("animationend", onStartAnimEnd);
intro.stop();
console.log("Start anim ended");
}
问题消失了,但这似乎不对...所以,如果我将 animationend 事件的侦听器分配从:
intro.on("animationend", onStartAnimEnd);
到:
ask.addEventListener("animationend", onAskAnimEnd);
...随着这种变化,无限期的事件捕获消失了。所以我的问题是:
- 这两个事件监听器分配有什么区别?
- 这个 animationend 事件是否在后台持续触发,因为我们正在更新 tick 事件中的舞台,即使没有什么需要重新渲染?
感谢您的宝贵时间!
【问题讨论】:
标签: events sprite easeljs createjs