Flash版倒计时

2008年05月03日 | 2,352 次浏览 | 标签: ,   

原作品是06世界杯临近期间英文雅虎页面上的阿迪达斯倒计时牌冠名广告。设计富有金属质感,属于我比较喜欢的风格。反编译以后发现代码比较乱,然后手就有点痒,再然后就有了下面的代码。
首先是CountDown的类,其中handler是Function类型的公有变量,该函数将用于处理怎么显示倒计时代码。

class CountDown {
	private var finalTime:Date;
	private var currentTime:Date;
	private var timeDiff:Number;
	public var handler:Function = null;

	public function CountDown(date:Date) {
		this.finalTime = date != null ? date : new Date(1900, 0, 0, 0, 0, 0);
	}

	private function init():Void {
		this.currentTime = new Date();
		this.timeDiff = finalTime.getTime() - currentTime.getTime();
		if (this.timeDiff < 0)
			this.timeDiff = 0;
	}

	public function run():Void {
		init();
		var _day:Number = Math.floor(timeDiff/(1000*60*60*24));
		var _hour:Number = Math.floor((timeDiff/(1000*60*60))%24);
		var _minute:Number = Math.floor((timeDiff/(1000*60))%60);
		var _second:Number = Math.floor((timeDiff/1000)%60);
		show(_day,_hour,_minute,_second);
	}

	private function show(day:Number, hour:Number, minute:Number, second:Number):Void {
		if(handler != null)
			handler(day,hour,minute,second);
	}
}

在倒计时影片剪辑中加入以下代码,其中1和2两个位置的判断很重要。

var cd = new CountDown(new Date(2012, 8, 22, 0, 0, 0));
var oldDigitString = "000000000";
function doStart(day,hour,minute,second){
	doShow(digitFix(day,4)+digitFix(hour,2)+digitFix(minute,2)+digitFix(second,2));
}

function doShow(digitString){
	if(oldDigitString == digitString) return;//1.
	for(var i = 0; i < digitString.length; i++){
		if(oldDigitString.charAt(i) != digitString.charAt(i))//2.
			doDisplay(eval('d_'+i),oldDigitString.charAt(i),digitString.charAt(i));
	}
	oldDigitString = digitString;
}

function doDisplay(o,oldNum,newNum){
	o._prev = oldNum;
	o._next = newNum;
	o.gotoAndPlay(2);
}

function digitFix(num,len):String{
	while(num.toString().length < len)
			num = '0'+num;
	return num.toString();
}

cd.handler = doStart;

this.onEnterFrame = function()
{
	cd.run();
}

剽窃后的成果-_-!

对不起,您的浏览器禁用脚本或者您的Flash播放器版本较低!请点击这里获取最新版本。

其中这里的终点时间是我30岁的生日,到倒计时牌都是0000000000的时候,不知道我会不会哭泣……

评论(0)

目前还没有评论

发表评论

最受欢迎

评论最多