canvas绘制虚线图表

最近有读者加我微信咨询这个问题,如下图所示:
image.png

要实现的效果如下:
image.png

其实难度不大,但是考虑一些人员对于canvas不熟悉,还是简单的介绍下。

其实该图表,就是一个圆圈外面在套一个圆弧的效果, 主要的难点在于不知道怎么绘制圆圈的虚线效果。 其实canvas本身已经支持了虚线的绘制,就是一个api调用的事情,api是setLineDash。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Line Dash</title>
    <style>
        canvas {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <canvas id="canvas" width="600" height="400"></canvas>
    <script>
        var ctx = document.getElementById( 'canvas' ).getContext( '2d' );
        var w = canvas.width,
                h = canvas.height;

        var x = w / 2,
                y = h / 2;
        ctx.save();
        ctx.strokeStyle = "gray";
        ctx.setLineDash([5,5]);
        ctx.lineWidth = 10;
        ctx.beginPath();
        ctx.arc(200,200,75,0,Math.PI *2);
        ctx.stroke();
        ctx.restore();

        ctx.save();
        ctx.beginPath();
        ctx.lineWidth = 12;
        ctx.lineCap = "round";
        ctx.joinCap = "round";
        ctx.strokeStyle = "red";
        ctx.arc(200,200,75,0,-Math.PI/2,Math.PI /2 );
        ctx.stroke();
        ctx.restore();
    </script>
</body>
</html>

绘制效果如下图所示:
result

ps: 后面那个读者也给我看了下css的实现, css实现这种东西还是太麻烦,一般不建议。
css
最近有读者加我微信咨询这个问题,如下图所示:
image.png

要实现的效果如下:
image.png

其实难度不大,但是考虑一些人员对于canvas不熟悉,还是简单的介绍下。

其实该图表,就是一个圆圈外面在套一个圆弧的效果, 主要的难点在于不知道怎么绘制圆圈的虚线效果。 其实canvas本身已经支持了虚线的绘制,就是一个api调用的事情,api是setLineDash。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Line Dash</title>
    <style>
        canvas {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <canvas id="canvas" width="600" height="400"></canvas>
    <script>
        var ctx = document.getElementById( 'canvas' ).getContext( '2d' );
        var w = canvas.width,
                h = canvas.height;

        var x = w / 2,
                y = h / 2;
        ctx.save();
        ctx.strokeStyle = "gray";
        ctx.setLineDash([5,5]);
        ctx.lineWidth = 10;
        ctx.beginPath();
        ctx.arc(200,200,75,0,Math.PI *2);
        ctx.stroke();
        ctx.restore();

        ctx.save();
        ctx.beginPath();
        ctx.lineWidth = 12;
        ctx.lineCap = "round";
        ctx.joinCap = "round";
        ctx.strokeStyle = "red";
        ctx.arc(200,200,75,0,-Math.PI/2,Math.PI /2 );
        ctx.stroke();
        ctx.restore();
    </script>
</body>
</html>

绘制效果如下图所示:
result

ps: 后面那个读者也给我看了下css的实现, css实现这种东西还是太麻烦,一般不建议。
css

关注公众号“ITMan彪叔” 可以及时收到更多有价值的文章。另外如果对可视化感兴趣,可以和我交流,微信541002349.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值