Flash版倒计时
原作品是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的时候,不知道我会不会哭泣……
