原作品是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播放器版本较低!请点击[这里](http://www.macromedia.com/go/getflashplayer/)获取最新版本。

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