一步一步去实现一个pie

作者: cb12hx | 来源:发表于2017-12-31 10:38 被阅读11次

1.画圆弧

在canvas中,可以通过arc来绘制一个圆或者火狐,我们先来看看绘制之后的圆和圆弧长什么样
上代码

    var c1=document.querySelector('#c1')
    var ctx=c1.getContext('2d')
    ctx.translate(250,250)
    ctx.arc(0,0,100,0,90*(Math.PI/180))
    ctx.fill()

上面的代码,首先将画笔移到250,250的位置,之后,画一个圆心在0,0,半径100,起始角是0,结束角是90的圆弧,看看效果


image.png

2.画扇形

这里大概来总结一下,上面的圆弧是怎么来的,其实canvas中,定义好起点和终点,然后将起点和终点连接起来之后,就形成了形状,至于起点和终点之间的形状长什么样,完全由调用的api来决定,比如上面的圆弧
有了上面的总结,那么我们要画扇形就简单了,圆弧已经有了两个点,接着我们再定义一个点,把三点连起来就行了;不错,聪明的你一定想到了,把圆心点连接上圆弧的起点和终点,就形成了一个扇形


image.png

来看看实现的代码

    var c1=document.querySelector('#c1')
    var ctx=c1.getContext('2d')
    ctx.translate(250,250)
    ctx.moveTo(0,0)
    ctx.arc(0,0,100,0,90*(Math.PI/180))
    ctx.fill()

仅仅是多了moveTo,它的意义就是将画笔移动到这个api的第一个参数和第二个参数位置

3.画饼图

扇形有了,那个饼图是不是就简单了,但是这里还有一点要说的,就是每一个扇区我们应该用颜色来区分,此处我们要用到fillStyle和beginPath,fillStyle就为fill填充样式,这里可以写一个渐变的变量或者直接填充颜色,示例是颜色,beginPath即开启一段新路径,即开启新路径之后,新路径的设计都不影响到老路径的设置,本示例中,新的扇区的颜色不影响老扇区的颜色,ok,上代码了

    function tranRad(deg){
        return deg*(Math.PI/180)
    }
    var c1=document.querySelector('#c1')
    var ctx=c1.getContext('2d')
    ctx.translate(250,250)
    ctx.moveTo(0,0)
    ctx.arc(0,0,100,0,tranRad(90))
    ctx.fillStyle = 'red'
    ctx.fill()
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.arc(0,0,100,tranRad(90),tranRad(135))
    ctx.fillStyle='green'
    ctx.fill()
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.arc(0,0,100,tranRad(135),tranRad(345))
    ctx.fillStyle ='gray'
    ctx.fill()
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.arc(0,0,100,tranRad(345),tranRad(360))
    ctx.fillStyle = 'orange'
    ctx.fill()
image.png

ok,一个简单的饼图就这样完成了,是不是很easy

4.添加文本

一般文本的位置,刚好是扇形中间的位置外延一定的距离,如下图所示


image.png

每一个黑点就是文本要在的位置,由图中可以看出,我们定义这个点的长度为(R+20),其中R是圆的半径,20是外延的距离,那么我们可以通过con算出这个点的x坐标,通过sin算出这个点的y左边,这样就能计算出了文本的位置了,
最后的效果图如下


image.png
Ok,一个pie图就这么完成了

相关文章

网友评论

    本文标题:一步一步去实现一个pie

    本文链接:https://www.haomeiwen.com/subject/xlsogxtx.html