我正在尝试在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开始并继续计算分钟直到某个按钮单击...这应该适用于任何时区
答案 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";
*/
}