Flex Timer示例

tom*_*rry 0 apache-flex flash timer flex3 actionscript-3

我试图在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>
Run Code Online (Sandbox Code Playgroud)

有人能说出问题是什么吗?怎么解决?

编辑: 如果我在我的电脑上运行这个例子,计时器从30.0开始直到它达到59.59然后它变回0.0然后再次开始......现在我想要的是从0.0开始并继续计数分钟直到单击某个按钮...这应该适用于任何时区

wel*_*rat 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
}
Run Code Online (Sandbox Code Playgroud)