Flex Timer示例

时间:2011-12-09 14:26:47

标签: flash actionscript-3 flex timer flex3

我正在尝试在flex中使用计时器。我提到了这个例子:Timer : blog.flexexamples.com

以下是我想要达到的目标:

  

我想启动计时器,显示自计时器以来分钟已过去   开始。它应独立于您所在的地区。(   无论你在哪个区域,计时器应该可以正常工作   每个区域。)

     

计时器应该继续,除非点击某个按钮,我想要的地方   显示以分钟为单位的时间,在一个警告框中,然后计时器应该从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开始并继续计算分钟直到某个按钮单击...这应该适用于任何时区

2 个答案:

答案 0 :(得分:6)

您的用例不需要使用Date()和/或时区。您需要做的就是计算经过的秒数,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
}

答案 1 :(得分: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";
    */
}