canvas的一些基础分享

第一次发,就不多说了,直接上代码!

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<canvas id="canvas">
    对不起,你的浏览器不支持,请先升级您的浏览器!
</canvas>
<script>
    (function () {
        //获取canvas节点对象
        var canvas=document.getElementById("canvas");
        canvas.width="600";
        canvas.height="600";
        canvas.style.border="1px solid";

        //获取canvas上下文
        var context=canvas.getContext("2d");

        /*
        * 图形数据集
        * */
        var data = [
        {
            "value": .1,
            "color": "#ccc",
            "title": "老总"
        }{
            "value": .2,
            "color": "red",
            "title": "高级经理"
        },{
            "value": .3,
            "color": "blue",
            "title": "职员1"
        },{
            "value": .4,
            "color": "green",
            "title": "职员2"
        }];

        /*
        * 遍历数据绘制饼状图
        * */
        var tempAngle=-90; //起始度数
        var x0=300,y0=300,r=150;
        for(var i=0;i<data.length;i++){
            var obj=data[i];
            //开启新状态
            context.beginPath();
            //圆心点
            context.moveTo(300,300);
            //设置填充样式
            context.fillStyle=obj.color;
            /*
            * 绘圆:context.art(x,y,r,startAngle,endAngle,counterclockwise);
            * */
            var currentAngle=obj.value*360;  //当前角度
            var startAngle=tempAngle*Math.PI/180;//起始角度
            var endAngle=(currentAngle+tempAngle)*Math.PI/180; //终点角度

            //绘画
            context.arc(x0,y0,r,startAngle,endAngle);

            context.fill();
            context.stroke();

            /*
            绘制文字
            text-x=x0+Mathcos(指定的度数)*(半径+突出的长度)
             text-=y0+Mathsin(指定的度数)*(半径+突出的长度)
            */
            context.beginPath();
            var text=obj.value*100+"%占比";
            var textAngle=tempAngle+1/2*currentAngle;
            var x=x0+Math.cos(textAngle*Math.PI/180)*(r+20);
            var y=y0+Math.sin(textAngle*Math.PI/180)*(r+20);
            context.font="bold 22px '微软雅黑'";
            if(textAngle>90&&tempAngle<270){
                context.textAlign="end"
            }
            context.fillText(text,x,y);
            context.fill();

            tempAngle+=currentAngle;

        }
    })()
</script>
</body>
</html>

这里写图片描述

通过JavaScript 来绘制,因为canvas 元素本身是没有绘图能力的。所有绘制的工作必须在JavaScript内部完成。下面是一些canvas绘制总结

<script>
            var c = document.getElementById("canvas");
            var context = c.getContext("2d");
            /*绘制背景*/
            context.fillStyle="#FF0000";
            context.fillRect(0,0,150,75);

            /*绘制三角形*/
            context.moveTo(10,10);//开始的启点
            context.lineTo(150,50);//启点到该点的直线
            context.lineTo(10,50);//上一个点到该点的直线
            context.lineTo(10,10);//收尾连接
            context.stroke();

            /*绘制圆*/
            context.fillStyle="#fff000";
            context.beginPath();
            context.arc(30,30,10,0,Math.PI*2,true);
            context.closePath();
            context.fill();

            /*颜色渐变*/
            var rbg = context.createLinearGradient(0,80,150,75);
            rbg.addColorStop(0,"#ff0000");
            rbg.addColorStop(1,"#00ff00");
            context.fillStyle=rbg;
            context.fillRect(0,80,150,75);

        </script>

这里直接汇总在一起了,如下图所示:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值