问答详情
源自:3-1 Canvas 时钟外边框圆

在线等

我这圆不会出来呀,我'照着打的代码呀58bfc5540001d9fa07801040.jpg
58bfc5850001a9f310400780.jpg

提问者:cutecat1234567890_ 2017-03-08 16:49

个回答

  • 马_贝er
    2017-08-25 21:42:20

    PI.不是pi

  • cutecat1234567890_
    2017-03-09 22:01:48


    58c160210001bdbf04070098.jpg
    18×rem是什么意思啊

  • Grass丶熙
    2017-03-08 17:15:41

    <!DOCTYPE html>

    <html>

    <head>

    <meta name="viewport" content="width=device-width,initial-scale=1">

    <meta charset="utf-8" />

    <title>canvas clock</title>

    <style type="text/css">

    div{

    text-align: center;

    margin-top: 250px;

    }

    #clock{

    border:1px solid #ccc;

    }

    </style>

    </head>

    <body>

    <div>

    <canvas id="clock" height="400px" width="400px"></canvas>

    </div>

    <script type="text/javascript">

    var dom = document.getElementById('clock');

    var ctx = dom.getContext('2d');

    var width = ctx.canvas.width;

    var height = ctx.canvas.height;

    var r = width / 2;

    var rem = width / 200;


    function drawBackground(){

    //时钟的圆

    ctx.save();

    ctx.translate(r,r);

    ctx.beginPath();

    ctx.lineWidth = 10 * rem;

    ctx.arc(0,0,r - ctx.lineWidth / 2,0,2*Math.PI,false);

    ctx.stroke();


    //数字

    var hourNumbers = [3,4,5,6,7,8,9,10,11,12,1,2];

    ctx.font = 18 * rem + 'px Arial';

    ctx.textAlign = 'center';

    ctx.textBaseline = 'middle';

    hourNumbers.forEach(function(number,i){

    var rad = 2 * Math.PI / 12 * i;

    var x = Math.cos(rad) * (r - 30 * rem);

    var y = Math.sin(rad) * (r - 30 * rem);

    ctx.fillText(number,x,y);

    });


    //60个小点点

    for(var i=0;i < 60; i++)

    {

    var rad = 2 * Math.PI / 60 * i ;

    var x = Math.cos(rad) * (r - 18 * rem);

    var y = Math.sin(rad) * (r - 18 * rem);

    ctx.beginPath();

    if(i%5===0)

    {

    ctx.fillStyle = '#000';

    ctx.arc(x,y,2 * rem,0,2* Math.PI,false);

    }

    else

    {

    ctx.fillStyle='#ccc';

    ctx.arc(x,y,2 * rem,0,2*Math.PI,false);

    }

    ctx.fill();

    }



    }


    //时钟

    function drawHour(hour,minute){

    ctx.save();

    ctx.beginPath();

    var rad = 2 * Math.PI / 12 * hour;

    var marad = 2 * Math.PI / 12 / 60 * minute;

    ctx.rotate(rad + marad);

    ctx.lineWidth = 6 * rem;

    ctx.lineCap = 'round';

    ctx.moveTo(0,10 * rem);

    ctx.lineTo(0,-r / 2);

    ctx.stroke();

    ctx.restore();

    }


    //分钟

    function drawMinute(minute){

    ctx.save();

    ctx.beginPath();

    var rad = 2 * Math.PI / 60 * minute;

    ctx.rotate(rad);

    ctx.lineWidth = 3 * rem;

    ctx.lineCap = 'round';

    ctx.moveTo(0,10 * rem);

    ctx.lineTo(0, -r + 30 * rem);

    ctx.stroke();

    ctx.restore();

    }


    //秒针

    function drawSecond(second){

    ctx.save();

    ctx.beginPath();

    ctx.fillStyle='#c14543';

    var rad = 2 * Math.PI / 60 * second;

    ctx.rotate(rad);

    ctx.moveTo(-2 * rem,20 * rem);

    ctx.lineTo(2 * rem,20 * rem);

    ctx.lineTo(1, -r + 18 * rem);

    ctx.lineTo(-1, -r + 18 * rem);

    ctx.fill();

    ctx.restore();

    }


    //中间的圆点

    function drawDot(){

    ctx.beginPath();

    ctx.fillStyle ='#fff';

    ctx.arc(0,0,3 * rem,0,2*Math.PI,false);

    ctx.fill();

    }




    //动态

    function draw()

    {

    ctx.clearRect(0,0,width,height);

    var now = new Date();

    var hour = now.getHours();

    var minute = now.getMinutes();

    var second = now.getSeconds();

    drawBackground();

    drawHour(hour,minute);

    drawMinute(minute);

    drawSecond(second);

    drawDot();

    ctx.restore();

    }


    draw();

    setInterval(draw,1000);

    </script>

    </body>

    </html>


  • Grass丶熙
    2017-03-08 17:13:27

    function drawBackground(){

    //时钟的圆

    ctx.translate(r,r);

    ctx.beginPath();

    ctx.lineWidth = 10;

    ctx.arc(0,0,r -5,0,2*Math.PI,false);

    ctx.stroke();

    }