• 【转】Actionscript 倒计时组件


    来自ComingX:http://www.comingx.com/?p=1783

    /**
     * ComingX.com
     * Copyright 2012. All rights reserved.
     *
     * @Author: Jingle
     * @Email: jingdongemail#gmail.com
     * @Created date: 2012-2-6
     */
    package com.jingle.view.component
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.events.TimerEvent;
    	import flash.text.TextLineMetrics;
    	import flash.utils.Timer;
    	import mx.controls.Label;
    	import mx.core.UIComponent;
     
    	[Event(name="timeUp", type="flash.events.Event")]
    	public class TimeCounter extends UIComponent
    	{
    		private var timer:Timer;
    		private var timeLabel:Label;
    		/**
    		 * 剩余时间,毫秒单位 
    		 */		
    		private var leftTime:Number;
     
    		/**
    		 * 时间到之后显示替代文本 
    		 */		
    		private static const TIME_UP:String = "时间到";
     
    		/**
    		 * 结束时间,毫秒单位
    		 */
    		private var _endTime:Number;
     
    		/**
    		 * 字体大小 
    		 */		
    		public var fontSize:Number = 20;
    		/**
    		 * 字体颜色 
    		 */		
    		public var fontColor:uint = 0x000000;
     
    		public function TimeCounter()
    		{
    			super();
    			timer = new Timer(1000);
    			timer.addEventListener(TimerEvent.TIMER,onTimer);
     
    		}
     
    		public function get endTime():Number{
    			return this._endTime;
    		}
     
    		public function set endTime(value:Number):void
    		{
    			if(value != this._endTime && value)
    			{
    				_endTime = value;
    				var timeNow:Number = (new Date()).getTime();
    				leftTime = _endTime - timeNow;
    				timer.stop();
    				timer.reset();
    				timer.start();
    			}
    		}
     
    		override protected function createChildren():void
    		{
    			if(!timeLabel)
    			{
    				timeLabel = new Label();
    				addChild(timeLabel);
    				this.setStyle("fontSize",fontSize);
    				this.setStyle("color",fontColor);
    				var lineMatrics:TextLineMetrics = measureText("00 : 00 : 00");
    				timeLabel.width = lineMatrics.width + 10;
    				timeLabel.height = lineMatrics.height + 4;
    				timeLabel.setStyle("textAlign","center");
    				timeLabel.setStyle("verticalAlign","middle");
    			}
     
    		}
     
    		protected function onTimer(evt:TimerEvent):void
    		{
    			leftTime = leftTime - 1000;
    			if(leftTime <= 0)
    			{
    				//到时间了
    				timer.stop();
    				dispatchEvent(new Event("timeUp"));
    			}
    			updateTimeLabel();
    		}
     
    		protected function updateTimeLabel():void
    		{
    			if(leftTime <= 0)
    			{
    				timeLabel.text = TimeCounter.TIME_UP;
    				return;
    			}
    			var h:Number = Math.floor(leftTime / (1000 * 60 * 60) );
    			var m:Number = Math.floor(leftTime % (1000 * 60 * 60) / (1000 * 60));
    			var s:Number = Math.floor(leftTime % (1000 * 60) / 1000);
     
     
    			timeLabel.text = oneToTow(h) + " : " + oneToTow(m) + " : " + oneToTow(s);
    		}
     
    		private function oneToTow(value:Number):String
    		{
    			var str:String;
    			if(value < 10)
    			{
    				str = "0" + value;
    			}
    			else
    			{
    				str = "" + value;
    			}
    			return str;
     
    		}
    	}
    }
    

     使用方法:

    1 <component:TimeCounter endTime="{model.deadline}" fontSize="30" timeUp="timeUpHandler(event)" />
  • 相关阅读:
    C# Yield的使用
    vs code使用Markdown编辑使用插件
    理解IEnumerable和IQueryable
    LINQ使用CopyToDataTable
    Predicate委托
    Func委托
    Action委托
    Delegate委托
    TypeError: Cannot read property 'thisCompilation' of undefined
    由于找不到vcruntime140.dll,无法继续执行代码。
  • 原文地址:https://www.cnblogs.com/shanlanjie/p/2415905.html
Copyright © 2020-2023  润新知