Пример Flex Timer - PullRequest
       19

Пример Flex Timer

0 голосов
/ 09 декабря 2011

Я пытаюсь использовать таймер в 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 ]

6 голосов
/ 09 декабря 2011

Ваш вариант использования не требует использования 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
}
0 голосов
/ 09 декабря 2011

Пример, на который вы ссылаетесь, усложняет задачу для вашей конкретной проблемы. Вот небольшой пример того, как вы можете показать минуты с помощью простого 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";
    */
}
...