CreateJS定位mc范围问题

时间:2017-03-05 02:55:43

标签: javascript html5-canvas createjs animate-cc

在使用CreateJS的Adobe AnimateCC中,我在第一帧上有一个名为disclaimer_btn的mc,在第一帧上有一个名为discTxt的mc。我希望能够将disclaimer_btn和gotoAndStop鼠标悬停在discTxt中的帧标签上。围绕第150帧我尝试进行鼠标悬停并且它不起作用。如果我在我的功能中使用警报框,那就有效。

错误为Uncaught TypeError: Cannot read property 'bind' of undefined,在代码中指向.bind(this));

如果我从this.discTxt之前删除this.discTxt.fl_MouseOverHandler.bind(this));,我会收到错误Uncaught ReferenceError: fl_MouseOverHandler is not defined

我已阅读this SO postthis one,在这种情况下,这些解决方案对我不起作用。

我认为这是一个范围问题,我在这里做错了什么?

var frequency = 3;
stage.enableMouseOver(frequency);
this.disclaimer_btn.addEventListener("mouseover", this.discTxt.fl_MouseOverHandler.bind(this));

this.fl_MouseOverHandler = function()
{
    this.discTxt.gotoAndStop("on");

}

1 个答案:

答案 0 :(得分:1)

这只是订单的问题。因为您必须将函数定义为this上的变量,所以函数定义不会被“提升”。无论在代码中定义它们的顺序,都会首先定义Hoisted函数。

// Hoisted
function myFunction() {}

// Not hoisted
var myFunction = function() {}
this.myFunction = function() {}

在第二个示例中,定义了变量本身,但在您设置变量之前它将为null。您可以通过将addEventListener移动到该行下方来解决此问题,以便在定义函数后调用它。

或者,更改为托管方法,然后绑定:

btn.addEventListener("click", myFunction.bind(this));
function myFunction() {}

您还可以使用on,这是addEventListener的CreateJS函数替换,它具有一些语法糖,例如作用域参数。

btn.on("click", myFunction, this);

最后,如果您使用this定义函数,请确保传递正确的值。在您的示例中,您在this上定义了该函数,但将其作为this.discTxt的属性传递。除非this.discTxt是另一个MovieClip,而是在那里定义了函数,否则你将传递null。

TLDR:

  • 如果您在this上将该函数定义为属性,则将其移到`addEventListener
  • 下面
  • 或者更改它以便使用function myFunction()定义函数并绑定它。