日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

canvas画饼图

發布時間:2023/12/2 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 canvas画饼图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

<style>
body {
? ? background: black;
? ? text-align: center;
}
#cans {
? ? background: white;
}
</style>

<script>
function disToRad(n){//將度數表示弧度計算的方法
return n*Math.PI/180;//π用PI表示,π=180°,所以1°=PI/180
}

window.οnlοad=function(){
? ? let cans=document.getElementById("cans");//獲取畫布
? ? let ctx=cans.getContext("2d");//創建畫板
? ? let cx=300;//設置x軸初始位置坐標(即圓的中心坐標)
? ? let cy=200;//設置y軸初始位置坐標(即圓的中心坐標)
? ? let r=150;//半徑

? ? function pie(startAng,endAng,color){//創建一個畫扇形的方法
? ? ? ? ?let nx,ny;//x軸初始位置坐標
? ? ? ? ?ctx.beginPath();//防止之前畫好的部分受后面畫的影響
? ? ? ? ?ctx.moveTo(cx,cy);//畫筆開始坐標(即圓的中心坐標)
? ? ? ? ?nx=cx Math.sin(disToRad(startAng))*r;//弧線初始點的x軸坐標
? ? ? ? ?ny=cy-Math.cos(disToRad(startAng))*r;
? ? ? ? ?ctx.lineTo(nx,ny);//設置終點坐標(弧線初始點坐標)
? ? ? ? ?ctx.arc(cx,cy,r,disToRad(startAng-90),disToRad(endAng-90),false);//畫扇形,弧度=度數-90
? ? ? ? ?ctx.closePath();//圖形閉合
? ? ? ? ?ctx.stroke();//描邊
? ? ? ? ?ctx.fillStyle=color;//設置填充顏色
? ? ? ? ? ctx.fill();//填充
? ? }

? ? var data=[10,30,35,20,5];//表示度數的數組
? ? let color=['red','green','yellow','blue','orange'];//表示顏色的數組
? ? let sum=data.reduce(function(prev,current){
? ? ? ? return prev current;//求總和
? ? ?})
? ? let avgDegree=data.map(function(item){
? ? ? ? return item/sum*360;//轉換為角度
? ? })
? ?lastDegree=0;//設置初始度數
? avgDegree.forEach(function(item,index){
? ? ? pie(lastDegree,lastDegree item,color[index]);//調用pie(),的分別循環換獲取startAng,endAng,color
? ? ? lastDegree =item;
? ?})


}

</script>

<body>
<canvas id="cans" height="800" width="1200">該瀏覽器不支持canvas元素操作,請更新瀏覽器</canvas>
</body>

效果如圖:


更多專業前端知識,請上 【猿2048】www.mk2048.com

總結

以上是生活随笔為你收集整理的canvas画饼图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。