如何使用 createjs 定位 MovieClip

how to target a MovieClip with createjs

我正在尝试导出在 Flash 中可以正常工作但在 html5 canvas 中导出时无法正常工作的合影动画。

诀窍是 "simple":每张照片都是一个按钮,当您将鼠标悬停在某人的照片上时,他的职位就会出现。

我无法使用 createjs 实现它!

我的舞台上有一个名为 "jobs_cont" 的 MovieClip 实例,它的时间轴具有不同的关键帧和每个人的职位标签。

问题是我没有成功定位 "jobs_cont" 并在悬停按钮时在其时间轴中使用 gotoAndPlay 特定帧或标签。

只有 "alert instruction" 被识别,但 "jobs_cont.gotoAndPlay" 不被识别:

var frequency = 3;
stage.enableMouseOver(frequency);
this.mybutton.addEventListener("mouseover", fl_MouseOverHandler);
function fl_MouseOverHandler(){ 
    this.jobs_cont.gotoAndPlay("mylabel");
    alert("hovered by mouse");
    // end of your personalized code
}

我想我一定是在 createjs 中遗漏了一些针对 "jobs_cont" 的东西,但我是 javascript 中的新手,尽管我进行了一天的研究,但还是无法弄清楚。 如果有人可以给出提示。 谢谢。

您正在处理范围问题。如果您使用上述语法在时间轴上定义一个函数,则该函数没有作用域,因此 this 变为 Window

您可以更改要在当前对象上定义的函数语法:

this.fl_MouseOverHandler = function(){ 
    this.jobs_cont.gotoAndPlay("mylabel");
    alert("hovered by mouse");
    // end of your personalized code
}

最后,JavaScript 不会自动为事件侦听器提供函数范围(目前!),因此您必须自己确定函数的范围。如果你有 0.7.0 或更高版本的 EaselJS,你可以使用 on 方法而不是 addEventListener (docs)。请注意,您还必须使用 this.fl_MouseOverHandler

this.mybutton.on("mouseover", this.fl_MouseOverHandler, this);

您还可以使用诸如 Function.prototype.bind() (docs):

等实用方法来确定函数的范围
this.mybutton.addEventListener("mouseover", this.fl_MouseOverHandler.bind(this));

希望对您有所帮助!