FLex 固定时间倒计时 并计时结束后暄软组件

资源中心有实例

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   minWidth="955"
			   minHeight="600"
			   creationComplete="application1_creationCompleteHandler(event)">
	<s:layout>
		<s:HorizontalLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import flash.filters.BitmapFilterQuality;
			import flash.filters.BitmapFilterType;

			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.controls.LinkButton;
			import mx.events.FlexEvent;

			import spark.components.Label;
			import spark.effects.animation.RepeatBehavior;

			[Bindable]
			private var arr:ArrayCollection=new ArrayCollection([
				{meetid: "YD5", meetname: "封闭车站", meettime: "00:01:00"}, 
				{meetid: "YD6", meetname: "疏散乘客", meettime: "00:01:00"}, 
				{meetid: "YD7", meetname: "限制乘客进站", meettime: "00:01:45"}, 
				{meetid: "YD8", meetname: "赶赴现场", meettime: "00:01:20"}, 
				{meetid: "YD9", meetname: "封闭换乘通道", meettime: "00:00:20"}, 
				{meetid: "YD10", meetname: "值班主任", meettime: "00:00:20"}, 
				{meetid: "YD11", meetname: "报告总调", meettime: "00:01:35"}, 
				{meetid: "YD12", meetname: "发布应急短信", meettime: "00:00:05"}, 
				{meetid: "YD13", meetname: "解除应急短信", meettime: "00:00:05"}]);

			[Bindable]
			private var arrSec:ArrayCollection=new ArrayCollection(); //存储倒数秒数
			[Bindable]
			private var arrName:ArrayCollection=new ArrayCollection(); //存储linkbutton
			[Bindable]
			private var arrTime:ArrayCollection=new ArrayCollection(); //存储秒数的LinkButton
			[Bindable]
			private var maxSec:int; //最大的秒数

			[Bindable]
			private var timer:Timer=new Timer(1000, 0);
			[Bindable]
			private var i:int=0;
			[Bindable]
			private var allSces:int=0; //计算小时+分钟+秒的和  共有多少秒  

			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				timer.addEventListener(TimerEvent.TIMER, timerHandler);
				for each (var item:Object in arr)
				{
					var linkbutt:LinkButton=new LinkButton();
					linkbutt.addEventListener(MouseEvent.CLICK, linkStop);
					linkbutt.label=item.meetname; //名字
					linkbutt.id=item.meetid; //编号
					vbox.addChild(linkbutt); //界面添加button
					arrName.addItem(linkbutt); //存储要点名称的集合


					var lab:LinkButton=new LinkButton();
					lab.enabled=false;
					lab.id=item.meetid; //编号
					lab.label=item.meettime; //时间
					vbox1.addChild(lab); //同要点名称一样,添加在处置要点名称的后面显示
					arrTime.addItem(lab); //存储要点时间的集合


					//处置要点的处置时间
					var str:String=item.meettime;
					var arr:Array=str.split(":"); //截取前的格式为00:00:00  小时:分钟:秒

					var hours:int=0; //小时
					var mins:int=0; //分钟
					var sec:int=0; //秒

					//将小时、分钟、秒转换成int类型
					if (arr[0] != "00")
					{
						hours=parseInt(arr[0]);
					}
					if (arr[1] != "00")
					{
						mins=parseInt(arr[1]);
					}
					if (arr[2] != "00")
					{
						sec=parseInt(arr[2]);
					}


					//计算小时+分钟+秒的和  共有多少秒
					allSces=hours * 3600 + mins * 60 + sec;
					//如果最后结果的和等于初始化的0,则0秒数
					if (maxSec < allSces)
					{
						maxSec=allSces;
					}

					var obj:Object=new Object();
					obj.id=item.meetid; //处置要点编号
					obj.times=allSces; //处置要点的处置总秒数
					arrSec.addItem(obj); //管理每个处置要点的总秒数集合
				}
				timer.start();
			}


			private function timerHandler(event:TimerEvent):void
			{
				i=i + 1; //倒计时的秒数

				//如果i(当前秒数,每秒钟+1)大于最大的秒数,timer停止
				if (i <= maxSec)
				{
					//所有处置要点的秒数,如果时间相等渲染此组件
					for each (var obj:Object in arrSec)
					{
						if (obj.times == i)
						{
							for each (var linkBut:LinkButton in arrName)
							{
								if (obj.id == linkBut.id)
								{
									glower.target=linkBut;
									glower.play();
									//如果多个组件的时间相等,则不需要使用此函数,直接glower.play();即可,否则,指挥渲染一个组件。
//									linkBut.callLater(function():void
//										{
//											Alert.show(linkBut.id.toString());
//											glower.play();
//
//										});
									break;
								}
							}
						}
					}

					showTimes(arrTime);
				}
				else
				{
					if (timer != null)
						timer.stop();
				}
			}

			/**
			 * 时间处置,倒数
			 * **/
			private function showTimes(arrC:ArrayCollection):void
			{
				vbox1.removeAllChildren(); //每一秒钟都清空原有数据,重新添加
				for each (var lab:LinkButton in arrC)
				{
					var text:String=lab.label;
					var arr:Array=text.split(":");

					var h:int=0; //小时
					var f:int=0; //分钟
					var s:int=0; //秒

					//将00:00:00格式中截取,判断时间是否为00,不为00获取相应的时分秒
					if (arr[0] != "00")
					{
						h=parseInt(arr[0]);
					}
					if (arr[1] != "00")
					{
						f=parseInt(arr[1]);
					}
					if (arr[2] != "00")
					{
						s=parseInt(arr[2]);
					}

					var allSec:int=h * 3600 + f * 60 + s; //得到一个总秒数
					if (allSec > 0) //如果总秒数小于0,linkbutton显示00:00:00
					{
						var lint:int=allSec - 1; //秒数每次循环-1

						//判断秒数的时间,拼接成00:00:00的时间格式,则形成处置要点倒计时
						if (lint < 60) //如果总秒数小于60
						{
							var str:String=lint + "";
							if (str.length < 2)
								str="0" + str;
							lab.label="00:00:" + str;
						}
						else if (lint >= 60 && lint < 3600) //在一分钟和一个小时之内
						{
							//设置分钟、秒数,小时默认为00
							var mins:String=(Math.floor(lint / 60)).toString();
							var sec:String=(lint - (Math.floor(lint / 60)) * 60).toString();
							if (mins.length < 2)
								mins="0" + mins;
							if (sec.length < 2)
								sec="0" + sec;
							lab.label="00:" + mins + ":" + sec;
						}
						else if (lint >= 3600) //大于一个小时
						{
							var hour:String=(Math.floor(lint / 3600)).toString(); //向下限值 小时
							var minss:String=(lint - (Math.floor(lint / 3600)) * 60).toString(); //得到分钟数,向下限值
							var secs:String=(lint - (lint - (Math.floor(lint / 3600)) * 60) * 60).toString();
							if (hour.length < 2)
								hour="0" + hour;
							lab.label=hour + ":" + minss + ":" + secs;
						}
					}
					else
					{
						lab.label="00:00:00";
					}
					vbox1.addChild(lab);
				}
			}

			private function linkStop(event:MouseEvent):void
			{
				var obj:LinkButton=event.currentTarget as LinkButton;
				for each (var linkBut:LinkButton in arrName)
				{
					if (obj.id == linkBut.id)
					{
						linkBut.filters=[];
					}
				}
			}
		]]>
	</fx:Script>
	<fx:Declarations>
		<s:GradientGlowFilter id="glow"
							  blurX="8"
							  blurY="8"
							  quality="{BitmapFilterQuality.HIGH}"
							  type="{BitmapFilterType.OUTER}"
							  knockout="false">
			<s:entries>
				<s:GradientEntry alpha="0"
								 color="0xFF0000"
								 ratio="0"/>
				<s:GradientEntry alpha="1"
								 color="0xFFFF00"
								 ratio="128"/>
				<s:GradientEntry alpha="1"
								 color="0xFFFFFF"
								 ratio="255"/>
			</s:entries>
		</s:GradientGlowFilter>
		<s:AnimateFilter id="glower"
						 bitmapFilter="{glow}"
						 duration="600"
						 repeatCount="0"
						 repeatBehavior="{RepeatBehavior.REVERSE}">
			<s:SimpleMotionPath property="strength"
								valueFrom="0"
								valueTo="2"/>
		</s:AnimateFilter>
	</fx:Declarations>

	<mx:VBox id="vbox"
			 width="180"
			 height="100%">

	</mx:VBox>
	<mx:VBox id="vbox1"
			 width="200"
			 height="100%">

	</mx:VBox>
</s:Application>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值