2017-03-02 102 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,如果你想了解更多。