You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Animate CC(Canvas)如何访问e.currentTarget中的变量?

解决Animate CC Canvas模式下访问MovieClip内部变量的问题

嘿,这个问题我太熟了——Animate CC的Canvas模式(基于CreateJS)和传统AS3的变量作用域逻辑完全不一样,你踩的是典型的作用域坑!我来给你拆解清楚:

为什么你现在得到的是undefined?

你在box剪辑里写的两行代码都有问题:

  • var myNum = 3;:这个var把变量变成了剪辑内部代码的局部变量,外部的根时间轴完全访问不到这个变量。
  • myNum = 5;:不加var的话,这个变量会被挂载到全局window对象上,而不是box这个MovieClip实例本身,所以你用e.currentTarget.myNum去访问实例的属性,自然找不到,返回undefined。

正确的实现方式

要让外部能访问到剪辑内部的变量,你需要把变量直接挂载到MovieClip的实例本身,也就是用this来赋值:

步骤1:修改box剪辑内部的代码

打开box这个MovieClip的内部时间轴,把原来的代码替换成:

this.myNum = 5; // 直接把变量绑定到当前MovieClip实例上

如果需要覆盖成3,就改成this.myNum = 3;就行,不要加var。

步骤2:根时间轴的代码可以保持(或优化)

你的根时间轴代码其实没问题,现在修改后就能正常输出了:

this.box.addEventListener("click", clickHandler);
function clickHandler(e) {
    console.log(e.currentTarget.myNum); // 现在会输出5或者3啦
    // 也可以直接写 console.log(this.box.myNum); 效果一样
}

额外提醒

Canvas模式下的Animate本质是用CreateJS实现的,所有MovieClip都是JS对象,只有挂载到实例本身(this)的属性,外部才能通过实例访问到,和AS3里的public变量逻辑完全不同,别再用AS3的老思路套啦!

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:42:10