Flash版倒计时

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

  1. class CountDown {
  2.     private var finalTime:Date;
  3.     private var currentTime:Date;
  4.     private var timeDiff:Number;
  5.     public var handler:Function = null;
  6.    
  7.     public function CountDown(date:Date) { 
  8.         this.finalTime = date != null ? date : new Date(1900, 0, 0, 0, 0, 0);
  9.     }
  10.    
  11.     private function init():Void {
  12.         this.currentTime = new Date();
  13.         this.timeDiff = finalTime.getTime() - currentTime.getTime();
  14.         if (this.timeDiff < 0)
  15.             this.timeDiff = 0;   
  16.     }
  17.    
  18.     public function run():Void {
  19.         init();
  20.         var _day:Number = Math.floor(timeDiff/(1000*60*60*24));
  21.         var _hour:Number = Math.floor((timeDiff/(1000*60*60))%24);
  22.         var _minute:Number = Math.floor((timeDiff/(1000*60))%60);
  23.         var _second:Number = Math.floor((timeDiff/1000)%60);
  24.         show(_day,_hour,_minute,_second);
  25.     }
  26.    
  27.     private function show(day:Number, hour:Number, minute:Number, second:Number):Void {
  28.         if(handler != null)
  29.             handler(day,hour,minute,second);
  30.     }
  31. }

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

  1. var cd = new CountDown(new Date(2012, 8, 22, 0, 0, 0));
  2. var oldDigitString = "000000000";
  3. function doStart(day,hour,minute,second){
  4.     doShow(digitFix(day,4)+digitFix(hour,2)+digitFix(minute,2)+digitFix(second,2));
  5. }
  6.  
  7. function doShow(digitString){
  8.     if(oldDigitString == digitString) return;//1.
  9.     for(var i = 0; i < digitString.length; i++){
  10.         if(oldDigitString.charAt(i) != digitString.charAt(i))//2.
  11.             doDisplay(eval('d_'+i),oldDigitString.charAt(i),digitString.charAt(i));
  12.     }
  13.     oldDigitString = digitString;
  14. }
  15.  
  16. function doDisplay(o,oldNum,newNum){
  17.     o._prev = oldNum;
  18.     o._next = newNum;
  19.     o.gotoAndPlay(2);
  20. }
  21.  
  22. function digitFix(num,len):String{
  23.     while(num.toString().length < len)
  24.             num = '0'+num;
  25.     return num.toString();
  26. }
  27.  
  28. cd.handler = doStart;
  29.  
  30. this.onEnterFrame = function()
  31. {
  32.     cd.run();
  33. }

剽窃后的成果-_-!

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

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

[ 分类: 学习 ] 由 Pan 发表于 May 3, 2008 3:05 pm  固定链接 

Flash版倒计时》 这篇文章一共有0 条评论   我也想说两句

还没有人对这篇文章发表评论,赶紧留一个吧。

RSS feed for comments on this post. TrackBack URI

相关文章:

发表评论