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

为什么按视频上写的最后出不来圆呢,求大神指教


代码什么的都对

提问者:慕粉4183213 2016-11-28 22:29

个回答

  • 慕粉4183213
    2016-11-29 16:55:53

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>canvas clock</title>

    <style type="text/css">

    div{text-align: center; margin-top: 230px;}

    #clock{border: 1px solid #fff;}

    </style>

    </head>

    <body>

    <div>

    <canvas id="clock" height="200px" width="200px"></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;

    //圆形

    function drawBackground(){

    ctx.save();

    ctx.translate(r, r);

    ctx.beginPath();

    ctx.lineWidth = 10;

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

    ctx.stroke();

    drawBackground();

    </script>

    </body>

    </html>

    为什么写成上面的代码不能显示

  • 慕桂英6574974
    2016-11-29 12:48:49

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>canvas clock</title>

    <style type="text/css">

    div{text-align: center; margin-top: 230px;}

    #clock{border: 1px solid #fff;}

    </style>

    </head>

    <body>

    <div>

    <canvas id="clock" height="200px" width="200px"></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;

    //圆形

    function drawBackground(){

    ctx.save();

    ctx.translate(r, r);

    ctx.beginPath();

    ctx.lineWidth = 10;

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

    ctx.stroke();

    //数字

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

    ctx.font = '18px 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);

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

    ctx.fillText(number,x,y);

    });

    //小点

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

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

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

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

    ctx.beginPath();

    if (i % 5 == 0) {

    ctx.fillStyle='#000';

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

    }else{

    ctx.fillStyle='#ccc';

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

    }

    ctx.fill();

    }

    }

    //时针

    function drawHour(hour,minute){

    ctx.save();

    ctx.beginPath();

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

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

    ctx.rotate(rad + mrad);

    ctx.lineWidth=6;

    ctx.lineCap='round';

    ctx.moveTo(0,10);

    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;

    ctx.lineCap='round';

    ctx.moveTo(0,10);

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

    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,20);

    ctx.lineTo(2, 20);

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

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

    ctx.fill();

    ctx.restore();

    }

    //圆点

    function drawDot(){

    ctx.beginPath();

    ctx.fillStyle='#fff';

    ctx.arc(0,0,3,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>