【问题标题】:EaselJS passing parameters with eventsEaselJS 通过事件传递参数
【发布时间】:2014-05-10 04:01:33
【问题描述】:

我正在使用 Adob​​e Flash CC 来创建 EaselJS 输出来操作 HTML5 画布。但是,将参数传递给事件侦听器的能力似乎存在很大的疏忽。

问题是我提供了多个动画输出以实现兼容性,一个使用 EaselJS,一个使用 Raphael,但是控制这些的界面保持不变,这些是纯 HTML 元素,数据存储在我希望调用的属性中通过触发事件和传递参数在 Flash IDE 中编写的函数。

我可以很容易地找到避免使用EventDispatcher 的方法,例如将它们注册到根对象并使用自定义处理程序直接调用它们。但是,我宁愿让我的 Flash IDE 输出尽可能普遍兼容,而不是污染我几乎无法控制的对象的命名空间。我认为在 Flash IDE 中编写如果没有外部帮助就无法工作的代码是一种糟糕的设计模式。

有没有办法将参数从 EaselJS 事件调度器传递给监听事件?我知道on() 提供了一个数据参数,但这没用,因为我需要根据用户交互将不同的参数传递给同一个事件。

【问题讨论】:

    标签: javascript html canvas easeljs flash-ide


    【解决方案1】:

    您可以在 Event 对象上放置您想要的任何属性。当你调度一个事件时,你可以使用一个像“完成”这样的字符串(如果你不需要参数更好,因为如果没有监听器它不会生成一个对象)。如果您有参数,请创建一个新的createjs.Event,并在其上放置您想要的任何属性:

    var event = new createjs.Event("complete");
    event.time = new Date();
    this.dispatchEvent(event);
    

    然后您可以在处理程序中检查事件对象。

    myObject.addEventListener("complete", handler); // add a listener
    function handler(event) {
        console.log(event.time);
    }
    

    希望有帮助!

    【讨论】:

    • 请注意,如果 EaselJS 事件被重新调度,那么它会被克隆,这将删除您的自定义属性。这应该不是问题,除非您手动重新调度事件,或者事件冒泡。
    • 自 0.8 版起不再工作
    • @DanielSantos - 你能澄清一下吗?这个问题差不多一年了。如果您遇到问题,请发布一个新问题。谢谢!
    • @DanielSantos 这是一个快速的小提琴,表明它可以工作:jsfiddle.net/hfmm71oc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2022-01-25
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多