JS Realizes the Clock Effect

  • Last update:January 20, 2021
  • I. Problem description

    When making reports, I hope to show the time instantly and have a more beautiful effect. The effect is as follows:

    1606359281483916.gif

    II. Implementation ideas

    Use the canvas function of HTIML5 plus JavaScript code to obtain the real time of the system, and draw the clock every second.

    III. Implementation steps

    1) Enter the following code in the cell, and then use HTML to display the content:

    1606359281338684.png

    <canvas id="view" height="300px" width="300px"></canvas>

    Note: The width and height attributes in the code can be adjusted according to your needs.


    2) In WEB Attributes > Pagination Preview, add a Loading End event

    1606359281459784.png

    The JavaScript code is as follows:

    var dom=document.getElementById("view");  //Get canvas element
    var ctx=dom.getContext("2d");            //Create context object
    var width=ctx.canvas.width;
    var height=ctx.canvas.height;
    var r=width/2;
    //Draw clock background
    function drawBackground(){
    ctx.translate(r,r);      //Reset the canvas origin to the center of the canvas
    ctx.beginPath();
    ctx.lineWidth=10;
    ctx.arc(0,0,r-5,0,2*Math.PI);    //Draw a circle as the border of the clock
    ctx.stroke();
    //Draw the scale on the clock
    for(var i=0;i<60;i++){
        var x=(r-20)*Math.cos(Math.PI*2/60*i);
        var y=(r-20)*Math.sin(Math.PI*2/60*i);
    //Every 5 scales are drawn in black, and the rest are drawn in gray
        if(i%5===0){
    ctx.fillStyle="#000000";
    }else{
    ctx.fillStyle="#cccccc";
    }
    ctx.beginPath();
    ctx.arc(x,y,5,0,2*Math.PI);
    ctx.fill();
    }
    //Draw the numbers on the clock
    ctx.font="20px Arial";
    ctx.textAlign="center";
    ctx.textBaseline="middle";
    ctx.fillStyle="#000000";
    for(var j=0;j<12;j++){
        var ax=(r-50)*Math.cos(Math.PI*2/12*j);
        var ay=(r-50)*Math.sin(Math.PI*2/12*j);
    ctx.beginPath();
    ctx.fillText(j>9?j-9:j+3,ax,ay);  //Because the angle of PI is calculated clockwise from 3 o'clock, the number must be judged and processed
    ctx.fill();
    }
    }
    //Draw hour hand
    function drawHour(hour,minute,second){
    ctx.save();      //Save the current drawing environment
    ctx.beginPath();
    //The angle of the hour hand is equal to the angle of the hour plus the angle of minutes and seconds converted to hours
    var rad=2*Math.PI/12*hour+2*Math.PI/12/60*minute+2*Math.PI/12/60/3600*second;
    ctx.rotate(rad);
    ctx.lineWidth=14;
    ctx.lineCap="round"; //Set the end of the drawing line to be a round hat shape
    ctx.moveTo(0,20);
    ctx.lineTo(0,-r+100);
    ctx.stroke();
    ctx.restore();   //Return to the previously saved drawing environment
    }
    //Draw minute hand
    function drawMinute(minute,second){
    ctx.save();      //Save the current drawing environment
    ctx.beginPath();
    //The angle of the minute hand is equal to the angle of minutes plus the angle of seconds converted to minutes
    var rad=2*Math.PI/60*minute+2*Math.PI/3600*second;
    ctx.rotate(rad);
    ctx.lineWidth=10;
    ctx.lineCap="round";
    ctx.moveTo(0,20);
    ctx.lineTo(0,-r+80);
    ctx.stroke();
    ctx.restore();   //Return to the previously saved drawing environment
    }
    //Draw the second hand
    function drawSecond(second){
    ctx.save();      //Save the current drawing environment
    ctx.beginPath();
    ctx.fillStyle="#FF0000";
    var rad=2*Math.PI/60*second;   //The angle of the second hand is the angle of the current second
    ctx.rotate(rad);
    ctx.lineWidth=2;
    ctx.lineCap="round";
    ctx.moveTo(0,30);
    ctx.lineTo(8,0);
    ctx.lineTo(0,-r+30);
    ctx.lineTo(-8,0);
    ctx.lineTo(0,30);
    ctx.fill();
    ctx.restore();   //Return to the previously saved drawing environment
    }
    //Redraw the clock
    function run(){
    ctx.clearRect(0,0,width,height);   //Empty the entire canvas and redraw in the code below
    ctx.save();     //Save the current drawing environment
    var time =new Date();      //Get current time
    var hour=time.getHours();    //Get hours
    var minute=time.getMinutes();  //Get minutes
    var second=time.getSeconds();  //Get seconds
    drawBackground();              //Draw background
        drawHour(hour,minute,second);  //Draw hour hand
        drawMinute(minute,second);     //Draw minute hand
        drawSecond(second);            //Draw second hand
        ctx.fillStyle="#555";
        ctx.beginPath();
    ctx.arc(0,0,8,0,2*Math.PI);
    ctx.fill();
    ctx.restore();  //Return to the previously saved drawing environment
    }
    window.setInterval(function(){run();},1000);  //Redraw the clock every second

    IV. Save and preview

    ClickPagination Preview, and the effect is as shown in the beginning.

    V. Remarks

    If it is in a dashboard, add a report block and perform the same operation, and then add the above JavaScript code to the function body of the following code in the event of the report block.

    setTimeout(function(){ 
      //insert the code here
      },1000);

    VI. Completed template

    Attachment List


    Theme: Secondary Development
    Already the First
    Already the Last
    • Helpful
    • Not helpful
    • Only read

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    Get
    Help
    Online Support
    Professional technical support is provided to quickly help you solve problems.
    Online support is available from 9:00-12:00 and 13:30-17:30 on weekdays.
    Page Feedback
    You can provide suggestions and feedback for the current web page.
    Pre-Sales Consultation
    Business Consultation
    Business: international@fanruan.com
    Support: support@fanruan.com
    Page Feedback
    *Problem Type
    Cannot be empty
    Problem Description
    0/1000
    Cannot be empty

    Submitted successfully

    Network busy