IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Flash版倒计时

    潘魏增发表于 2008-05-03 15:05:26
    love 0

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



沪ICP备19023445号-2号
友情链接