2017-03-02 96 views
0

在下面的代碼中,我正在運行一個簡單的計時器腳本,它基本上從30秒倒計時到0秒。我想要做的是獲取當前第二個顯示在階段。CreateJS沒有每秒更新動態文本框HTML 5 Canvas in animate

this.stop(); 

//COUNTDOWN TIMER 
var minute = 0; 
var second = 30; 

var clock = setInterval(function() { 
    second = second -1; 
    if(minute == 0 && second == 0){ 
     clearInterval(clock) 
    } 


     //If the seconds are less than 10, add a 0 
     if(second < 10){ 
     console.log("0"+minute+":0"+second+""); 
     }else{ 
     //Normal 
     console.log("0"+minute+":"+second+""); 

     } 

     this.text = second; 
     this.myTimer1.myTimer2.text = second 


}, 1000); 

但是,雖然倒計時的工作和功能如預期,我不斷得到錯誤消息myTimer2沒有定義。我真的很難找到答案。 myTimer1是影片剪輯的實例名稱 myTimer2是影片剪輯中動態文本框的實例名稱

任何幫助,將不勝感激。

感謝

+0

您確定在myTimer1中定義了一個myTimer2子元素(和變量)嗎?你有可能發佈lib js嗎?這個區間內的「this」是什麼?這個函數在全局範圍內調用的機會很大,所以'this'將會是'Window'。 – Lanny

回答

0

如果您看到了這個錯誤:Cannot read property 'myTimer2' of undefined,那麼這只是一個範圍的問題。

如果將函數作爲參數傳遞給setInterval,它將在全局範圍內調用。任何在相同範圍(秒,分鐘等)中定義的變量仍然可用,但this將變爲全局變量。

有化解功能範圍的幾種方法:


一個共同的(易)的解決方法是隻需在局部範圍定義一個別名this。該函數仍在全局範圍內調用,但您現在可以引用您想要引用的範圍。通常你將看到的代碼示例與_thisthat變量:

var _this = this; 
setTimeout(function() { 
    _this.doSomething(); // 
}, duration); 

另一種方法是結合方法。這在一些較舊的瀏覽器中不被支持(有很多polyfills),但是如果你使用的是CreateJS,那麼舊的瀏覽器支持並不是真正的問題。

setTimeout(function() { 
    this.doSomething(); 
}.bind(this), duration); 

希望有所幫助。有plenty of articles on scope in JavaScript,如果你想了解更多。