2017-03-05 30 views
0

在Adobe AnimateCC使用CreateJS我有一幀的一個叫做disclaimer_btn,並在第一幀的mc被稱爲discTxt。我希望能夠在discTxt的幀標籤上mouseover disclaimer_btn和gotoAndStop。四捨五入150我試圖做mouseover,它不工作。如果我在我的功能中使用了一個警告框,那就行了。CreateJS瞄準mc範圍問題

的錯誤是Uncaught TypeError: Cannot read property 'bind' of undefined並在代碼它指向了這裏.bind(this));

如果我從this.discTxt.fl_MouseOverHandler.bind(this));之前,我得到的錯誤Uncaught ReferenceError: fl_MouseOverHandler is not defined刪除this.discTxt

我已閱讀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

這只是訂單的一個問題。因爲你必須定義在this功能作爲變量,函數定義不是「紅旗」。懸掛功能得到第一個定義,無論他們是在代碼中定義的順序。

// Hoisted 
function myFunction() {} 

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

在第二個例子,變量本身是被定義的,但它會一直爲空,直到你設置它的行爲止,你可以通過將addEventListener移動到該行的下面來修復它,以便在函數被定義後調用它。

或者,更改爲託管方法,並綁定:

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

你也可以使用on,這是一個CreateJS函數替換爲addEventListener,它有一些語法糖,比如scope參數。

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

最後,如果你定義使用this功能,確保您傳遞正確的價值。在你的例子中,你定義了this的函數,但是把它作爲this.discTxt的一個屬性傳遞。除非this.discTxt是另一個MovieClip,並且該函數是在那裏定義的,否則您將傳遞null。

TLDR:

  • 如果定義了功能上this的屬性,然後將它下面的`的addEventListener
  • 或改變它,因此函數使用function myFunction()定義,並將其綁定。