canvas--饼状图

<body>

    <style>

        #box {

            border: 1px solid black;

        }

    </style>

    <canvas id="box" width="600" height="600"></canvas>

    <script>

        var canvas = document.querySelector("#box")

        var pen = canvas.getContext("2d")

        var deg = Math.PI / 180

        //假数据

        var arr = [{

                name: "clothes",

                money: 8000

            },

            {

                name: "car",

                money: 1580

            },

            {

                name: "eat",

                money: 5790

            },

            {

                name: "cash",

                money: 4090

            },

            {

                name: "foot",

                money: 2439

            },

        ]

        //总价

        arr.tatol = 0

        for (let i = 0; i < arr.length; i++) {

            arr.tatol = arr.tatol + arr[i].money

        }

        var stardeg = 0

        arr.forEach(el => {

            pen.beginPath()

            var r1 = 200

            //随机颜色

            var r = parseInt(Math.random() * 255)

            var g = parseInt(Math.random() * 255)

            var b = parseInt(Math.random() * 255)

            pen.fillStyle = `rgb(${r},${g},${b})`

            //求出每个money的占比

            var angle = (el.money / arr.tatol) * 360

            //利用占比来画圆弧

            pen.arc(300, 300, r1, stardeg * deg, (stardeg + angle) * deg)

            //将圆弧与圆心相连接,形成扇形

            pen.lineTo(300, 300)

            //给每个扇形添加数组的name

            var y1 = 300 + Math.sin((stardeg + angle) * deg-angle*deg/2 ) *( r1+30)

            var x1 = 300 + Math.cos((stardeg + angle) * deg-angle*deg/2 ) * (r1+30)

            pen.fillText(`${el.name}`, x1, y1)

            stardeg = stardeg + angle

            pen.fill()

            pen.stroke()

        });

    </script>

</body>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值