2011-12-09 53 views
0

我想在flex中使用計時器。我提到這個例子:Timer : blog.flexexamples.comFlex計時器示例

這裏是我想達到的目標:

我要開始計時,顯示分鐘的經過因爲計時器 開始。它應該獨立於你所在的區域。( ,不管你在哪個區域,定時器應該在每個區域 都能正常工作)。

定時器應該繼續,除非點擊某個按鈕,我想要 顯示以分鐘爲單位的時間,在警報框中,然後定時器應該從0開始再次開始。

我試過我的例子,但它不能正常工作。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       layout="vertical" 
       verticalAlign="middle" 
       backgroundColor="white" 
       creationComplete="init()"> 

    <mx:Script> 
     <![CDATA[ 
      import flash.events.TimerEvent; 
      import flash.utils.Timer; 

      import mx.controls.Alert; 
      private const TIMER_INTERVAL:Number = 10; 

      private var baseTimer:int; 

      private var t:Timer; 

      private function init():void { 
       t = new Timer(TIMER_INTERVAL); 
       t.addEventListener(TimerEvent.TIMER, updateTimer); 
      } 

      private function updateTimer(evt:TimerEvent):void { 
       var d:Date = new Date(getTimer()-baseTimer); 
       var min:String = (d.minutes).toString(); 
       var sec:String = (d.seconds).toString(); 

       counter.text = String(min+"."+sec); 
      } 

      private function startTimer():void { 

       baseTimer = getTimer(); 
       t.start(); 
      } 

      private function stopTimer():void { 
       t.stop(); 
      } 
     ]]> 
    </mx:Script> 

    <mx:ApplicationControlBar dock="true"> 
     <mx:Button label="Start timer" click="startTimer()" /> 
     <mx:Button label="Stop timer" click="stopTimer()" /> 
    </mx:ApplicationControlBar> 

    <mx:Label id="counter" fontSize="96" /> 
</mx:Application> 

有人能告訴是什麼問題?如何解決它?

編輯: 如果我在我的電腦上運行這個例子,計時器從30.0開始,直到它達到59.59,然後將其轉回爲0.0,然後重新開始......現在,我要的是開始從0.0開始並繼續計數分鐘,直到點擊某個按鈕...並且這應該在任何時區都有效

+0

您應該告訴問題是什麼!出了什麼問題?我們能幫你什麼嗎? 「這不起作用」真的沒有給出任何線索。 – weltraumpirat

+0

如果我在我的電腦上運行這個例子,定時器從30.0開始,直到它達到59.59,然後它回到0.0,然後再次啓動......我想要的是從0.0開始,並繼續計數分鐘,直到某個按鈕被點擊...並且這應該在任何時區工作 – tomjerry

回答

6

你的使用情況不要求使用日期()和/或時區。您只需計算經過的秒數,Timer爲您提供了一種簡單的方法:將間隔設置爲1000(每秒一次)並使用Timer.currentCount。然後,你需要做的就是計算分鐘和秒數來顯示。以下是您可以整合到現有mxml中的實施方案:

private function init():void { 
    t = new Timer(1000); 
    t.addEventListener(TimerEvent.TIMER, updateTimer); 
} 

// it's good practice to separate event handler from functional method 
private function updateTimer(evt:TimerEvent):void { 
    display (t.currentCount); 
} 

private function display (count : int) : void { 
    var minutes : int = count/60; // divide by 60 to get the minutes 
    var seconds : int = count % 60; // use modulo operator to get the "rest" 
    var min : String = minutes < 10 ? "0" + minutes : "" + minutes; // add leading zero if necessary 
    var sec : String = seconds < 10 ? "0" + seconds : "" + seconds; 

    counter.text = min+":"+sec; // no need to cast to String if you use "" + something 
} 

private function startTimer():void { 
    t.start(); 
} 

private function stopTimer():void { 
    t.stop(); 
    t.reset(); 
    display (0); // reset the display 
} 
+0

這個工作會不管時區嗎?我的意思是UTC沒有問題嗎? – tomjerry

+0

當它超過60分鐘時,我希望它只能在幾分鐘內繼續顯示時間..就像這樣..'61:15' .. 61分15秒過去了。 – tomjerry

+0

這個例子都是正確的:當你簡單地計數定時器被調用的次數時,沒有UTC。由於沒有「小時」,會議紀要將繼續增加。 – weltraumpirat

0

您提到的示例使您的某個問題變得複雜一些。這裏是你如何證明一個簡單的Timer分鐘一個小例子:

private const TIMER_INTERVAL:Number = 1000*60; 
private var t:Timer; 

private function init():void { 
    t = new Timer(TIMER_INTERVAL); 
    t.addEventListener(TimerEvent.TIMER, updateTimer); 
    counter.text = "0"; 
} 

private function updateTimer(evt:TimerEvent):void { 

    counter.text = String(t.currentCount); 
} 

private function startTimer():void { 

    t.start(); 
} 

private function stopTimer():void { 

    t.stop(); 

    // if you want the timer to reset make sure to reset your text also 
    /* 
    t.reset(); 
    counter.text = "0"; 
    */ 
} 
+0

我運行了你的代碼..但是,仍然在5分鐘之後..它僅顯示「0」..時間不會改變。 – tomjerry

+0

當它超出60分鐘的標記,我希望它繼續在幾分鐘內顯示時間..像這樣.. 61:15 .. 61分15秒過去了 – tomjerry

+0

@ weltraumpirat的答案,適用於所有這 –