效果还是比较玄的,可以用来做iphone的主题。

 

算了,直接放上来还要调整模板,懒得弄了。 贴一些关键的代码吧。

 

代码


var cDate = new Date();

var nHours = cDate.getHours();

var nMins = cDate.getMinutes();

var nSecs = cDate.getSeconds();
var AMPM = 'AM';


$(document).ready(
function(){

        
    setAMPM();
    
//set seconds

    
var op = 0;

    
var fs = 0;

    
var secs = nSecs;

    
//for secs

    
for(var i=0;i<40;i++){

        op 
= op +0.025;

        fs 
= fs + 0.45;

        
var ind = secs+21;

        updateHands(op, ind, 
606,140'div.secs',fs);             

        secs 
= secs+1;

    }

    $(
'div.secs p:last').addClass('c').css({opacity: 1, fontSize: '10px'});

    

    
//for mins

    
var mins = nMins;

    op 
= 0;

    fs 
= 0;

    
for(var i=0;i<40;i++){ 

        op 
= op + 0.025;

        fs 
= fs + 0.45;

        
var ind = mins+21;

        updateHands(op, ind, 
606,100'div.mins',fs);             

        mins 
= mins+1;

    }

    $(
'div.mins p:last').addClass('c').css({opacity: 1, fontSize: '26px'});

    

    
//for hours

    
var hours = nHours;

    op 
= 0;

    fs 
= 11;

    
for(var i=0;i<8;i++){ 

        op 
= op + 0.15;

        fs 
= fs + 1.4;

        
var ind = hours+5;

        updateHands(op, ind, 
1230,50'div.hours',fs);                

        hours 
= hours+1;

    }

    $(
'div.hours p:last').addClass('c').css({opacity: 1, fontSize: '36px'});



    setInterval(updateTimer,
1000);

});

function updateHands(op, ind, max, aDiff, r, elem, fSize){    

    ind 
= ind%max;

    
var angle = (ind*aDiff)-90;

    
var cosA = Math.cos(angle*(Math.PI/180));

    
var sinA = Math.sin(angle*(Math.PI/180));

    
var x = Math.round(162+(r*cosA)-50);

    
var y = Math.round(160+(r*sinA)-25);

    
if(max != 12){
        
if (ind < 10) ind = '0' + ind;
    }

    
if (max == 12 && ind == 0) ind = '12';

    
var p = '<p style="font-size: ' + fSize + 'px;opacity: ' + op + ';left: ' + x + 'px;top: ' + y + 'px;">' + ind + '</p>';

    $(elem).append(p);    

}

function updateTimer(){

    
//ind = secs;

    
//ind = secs+37;

    nSecs 
= nSecs + 1;

    updateHands(
0, nSecs, 606,140'div.secs'22);

    

    updateStyle(
'div.secs'0.02540'22px'7000, .45);

    
//update mins

    nSecs 
= nSecs%60;

    
if(nSecs == 0){

        nMins 
= nMins + 1;

        updateHands(
0, nMins, 606,100'div.mins',25);

        updateStyle(
'div.mins'0.02540'25px'10000, .45);

        

        nMins 
= nMins%60;

        
if(nSecs == 0 && nMins == 0){    

            nHours 
= nHours + 1;

            updateHands(
0, nHours, 1230,50'div.hours',28);

            updateStyle(
'div.hours'0.159'30px'1000101.2);

            
//nHours = nHours + 1;

            bHours 
= nHours%12;
            setAMPM();

        }

    }

    

}



function updateStyle(elem, oI, limit, finalSize,t, s, fI){

    $(elem 
+ ' p').eq(0).remove();

    $(elem 
+ ' p.c').removeClass('c');



    
var o = 0;

    
var fs = s;

    
for(var i=0;i<limit;i++){

        o 
= o + oI;

        fs 
= fs + fI;

        $(elem 
+ ' p').eq(i).css({opacity: o, fontSize: fs + 'px' });

    }

    

    $(elem 
+ ' p:last').addClass('c').css({fontSize: '0px',opacity: 0}).animate({

        fontSize: finalSize,

        opacity: 
1        

    },t,
'easeOutBounce');    

}
function setAMPM(){
    
var nDate = new Date();
    
if(nDate.getHours()>11)
        AMPM 
= 'PM';
    
else
        AMPM 
= 'AM';
    $(
'div.ampm').css({opacity: 0, fontSize: '0px'}).animate({opacity: 1, fontSize: '20px'}, 700,'easeOutBounce').html(AMPM);
}


 具体效果看源码包吧。

点击下载源码包

posted on 2010-10-30 21:26  Blood  阅读(579)  评论(2编辑  收藏  举报