问答详情
源自:3-3 倒计时的时间计算

怎么实现从xx天xx时xx分xx秒开始倒计时

怎么实现从xx天xx时xx分xx秒开始倒计时?谢谢,最好附上源码

提问者:慕粉1470740819 2016-08-25 17:06

个回答

  • llyne
    2016-08-26 18:09:17

    // JavaScript Document

    //window.width =1024;

    //window.height =768;

    //窗口的处理更加的方便

    /*

    var WINDOW_WIDTH =1024;

    var WINDOW_HEIGHT =768;

    var RADIUS =8;

    var MARGIN_LEFT =30;

    var MARGIN_TOP =60;

    const endTime =new Date("2016-07-26 18:20:30");

    var curShowTimeSeconds =0;


    window.onload = function(){

    var canvas =document.getElementById("canvas");

    var context =canvas.getContext("2d");

    canvas.width =WINDOW_WIDTH;

    canvas.height =WINDOW_HEIGHT;

    curShowTimeSeconds =getCurrentShowTimeSeconds();

    render( context );//绘制当前的canvas函数的画布

    }

    function getCurrentShowTimeSeconds(){

    var curTime =new Date();

    var ret =endTime.getTime()-curTime.getTime();

    ret =Math.round(ret/1000);//换算成秒并且取整

    return ret>0?ret :0;

    }



    function render( cxt ){

    var hours =parseInt(curShowTimeSeconds/3600);

    var minutes =parseInt((curShowTimeSeconds-hours*3600)/60);

    var seconds =curShowTimeSeconds%60;

    renderDigit(MARGIN_LEFT,MARGIN_TOP,parseInt(hours/10),cxt);

    renderDigit(MARGIN_LEFT+15*(RADIUS+1),MARGIN_TOP,parseInt(hours%10),cxt);

    renderDigit(MARGIN_LEFT+30*(RADIUS+1),MARGIN_TOP,10,cxt);

        renderDigit(MARGIN_LEFT+39*(RADIUS+1),MARGIN_TOP,parseInt(minutes/10),cxt);

    renderDigit(MARGIN_LEFT+54*(RADIUS+1),MARGIN_TOP,parseInt(minutes%10),cxt);

    renderDigit(MARGIN_LEFT+69*(RADIUS+1),MARGIN_TOP,10,cxt);

    renderDigit(MARGIN_LEFT+78*(RADIUS+1),MARGIN_TOP,parseInt(seconds/10),cxt);

    renderDigit(MARGIN_LEFT+93*(RADIUS+1),MARGIN_TOP,parseInt(seconds%10),cxt);

        

       

    }



    function renderDigit(x,y,num,cxt){

    cxt.fillStyle ="rgb(0,102,153)";

    for (var i =0;i<digit[num].length;i++)

    for (var j=0;j<digit[num][i].length;j++)

    if(digit[num][i][j]==1)

    {

    cxt.beginPath();

    cxt.arc(x+j*2*(RADIUS+1)+(RADIUS+1),y+i*2*(RADIUS+1)+(RADIUS+1),RADIUS,0,2*Math.PI);

    cxt.closePath();

    cxt.fill();

    }

    }

    */

    var WINDOW_WIDTH = 1024;

    var WINDOW_HEIGHT = 768;

    var RADIUS = 8;

    var MARGIN_TOP = 60;

    var MARGIN_LEFT = 30;


    const endTime = new Date(2016,7,26,22,47,52);

    var curShowTimeSeconds = 0


    window.onload = function(){


        var canvas = document.getElementById('canvas');

        var context = canvas.getContext("2d");


        canvas.width = WINDOW_WIDTH;

        canvas.height = WINDOW_HEIGHT;


        curShowTimeSeconds = getCurrentShowTimeSeconds()

        render( context )

    }


    function getCurrentShowTimeSeconds() {

        var curTime = new Date();

        var ret = endTime.getTime() - curTime.getTime();

        ret = Math.round( ret/1000 )


        return ret >= 0 ? ret : 0;

    }


    function render( cxt ){


        var hours = parseInt( curShowTimeSeconds / 3600);

        var minutes = parseInt( (curShowTimeSeconds - hours * 3600)/60 )

        var seconds = curShowTimeSeconds % 60


        renderDigit( MARGIN_LEFT , MARGIN_TOP , parseInt(hours/10) , cxt )

        renderDigit( MARGIN_LEFT + 15*(RADIUS+1) , MARGIN_TOP , parseInt(hours%10) , cxt )

        renderDigit( MARGIN_LEFT + 30*(RADIUS + 1) , MARGIN_TOP , 10 , cxt )

        renderDigit( MARGIN_LEFT + 39*(RADIUS+1) , MARGIN_TOP , parseInt(minutes/10) , cxt);

        renderDigit( MARGIN_LEFT + 54*(RADIUS+1) , MARGIN_TOP , parseInt(minutes%10) , cxt);

        renderDigit( MARGIN_LEFT + 69*(RADIUS+1) , MARGIN_TOP , 10 , cxt);

        renderDigit( MARGIN_LEFT + 78*(RADIUS+1) , MARGIN_TOP , parseInt(seconds/10) , cxt);

        renderDigit( MARGIN_LEFT + 93*(RADIUS+1) , MARGIN_TOP , parseInt(seconds%10) , cxt);

    }


    function renderDigit( x , y , num , cxt ){


        cxt.fillStyle = "rgb(0,102,153)";


        for( var i = 0 ; i < digit[num].length ; i ++ )

            for(var j = 0 ; j < digit[num][i].length ; j ++ )

                if( digit[num][i][j] == 1 ){

                    cxt.beginPath();

                    cxt.arc( x+j*2*(RADIUS+1)+(RADIUS+1) , y+i*2*(RADIUS+1)+(RADIUS+1) , RADIUS , 0 , 2*Math.PI )

                    cxt.closePath()


                    cxt.fill()

                }

    }