日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > HTML > 正文

利用html5 canvas動態畫餅狀圖的示例代碼

2024-08-26 00:20:35
字體:
來源:轉載
供稿:網友

本文介紹了利用html5 canvas動態畫餅狀圖的示例代碼,分享給大家,具體如下:

先來看效果圖

canvas,畫餅狀圖,html5,餅狀圖

這里并沒引用jquery等第三方庫,只是用dom操作和canvas的特性編寫的。

canvas畫圓大體分為實心圓和空心圓。

根據需求分析知道該圓為實心圓。

1.先用canvas畫實心圓

canvas,畫餅狀圖,html5,餅狀圖

//偽代碼var canvas = document.createElement("canvas");var ctx = canvas.getContext('2d');ctx.beginPath();ctx.arc(圓心x軸坐標,圓心y軸坐標,半徑,開始角,結束角);ctx.fillStyle = 'green';ctx.closePath();ctx.fill();

2.根據不同顏色繪制餅狀圖

//偽代碼var canvas = document.createElement("canvas");var ctx = canvas.getContext('2d');ctx.beginPath();ctx.arc(圓心x軸坐標,圓心y軸坐標,半徑,綠色開始角,綠色結束角);ctx.fillStyle = 'green';ctx.closePath();ctx.fill();ctx.beginPath();ctx.arc(圓心x軸坐標,圓心y軸坐標,半徑,紅色開始角,紅色結束角);ctx.fillStyle = 'red';ctx.closePath();ctx.fill();ctx.beginPath();ctx.arc(圓心x軸坐標,圓心y軸坐標,半徑,黃色開始角,黃色結束角);ctx.fillStyle = 'yellow';ctx.closePath();ctx.fill();ctx.beginPath();ctx.arc(圓心x軸坐標,圓心y軸坐標,半徑,紫色開始角,紫色結束角);ctx.fillStyle = 'purple';ctx.closePath();ctx.fill();

3.動態繪制餅狀圖

動態繪制圓網上普遍推薦三種方法:requestAnimationFrame、setInterval(定時)、還有動態算角度的。

這里我用的是第一種requestAnimationFrame方式。

在編寫的過程中發現一個問題,就是動態畫圓時并不是以圓心的坐標畫的。為了解決這一問題,需要在每次畫圓時重新將canvas的畫筆的坐標定義為最初圓心的坐標。

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title></title>    <style>        #graph {/*            border: 1px solid black;            height: 100%;            width: 100%;            box-sizing: border-box;*/        }    </style></head><body><div id="circle" style="width: 500px;float: left;"></div></body></html><script type="text/javascript">(function(window,undefined){    var data = [        {"product":"產品1","sales":[192.44 ,210.54 ,220.84 ,230.11 ,220.85 ,210.59 ,205.49 ,200.55 ,195.71 ,187.46 ,180.66 ,170.90]},        {"product":"產品2","sales":[122.41 ,133.16 ,145.65 ,158.00 ,164.84 ,178.62 ,185.70 ,190.13 ,195.53 ,198.88 ,204.32 ,210.91]},        {"product":"產品3","sales":[170.30 ,175.00 ,170.79 ,165.10 ,165.62 ,160.92 ,155.92 ,145.77 ,145.17 ,140.27 ,135.99 ,130.33]},        {"product":"產品4","sales":[165.64 ,170.15 ,175.10 ,185.32 ,190.90 ,190.01 ,187.05 ,183.74 ,177.24 ,181.90 ,179.54 ,175.98]}    ]            var dom_circle = document.getElementById('circle');    if(dom_circle != undefined && dom_circle != null)    {        var canvas = document.createElement("canvas");        dom_circle.appendChild(canvas);        var ctx = canvas.getContext('2d');        var defaultStyle = function(Dom,canvas){            if(Dom.clientWidth <= 300)            {                canvas.width = 300;                Dom.style.overflowX = "auto";            }            else{                canvas.width = Dom.clientWidth;            }            if(Dom.clientHeight <= 300)            {                canvas.height = 300;                Dom.style.overflowY = "auto";            }            else            {                canvas.height = Dom.clientHeight;            }            //坐標軸區域            //注意,實際畫折線圖區域還要比這個略小一點            return {                p1:'green',                p2:'red',                p3:'yellow',                p4:'purple',                x: 0 ,    //坐標軸在canvas上的left坐標                y: 0 ,    //坐標軸在canvas上的top坐標                maxX: canvas.width ,   //坐標軸在canvas上的right坐標                maxY: canvas.height ,   //坐標軸在canvas上的bottom坐標                r:(canvas.width)/2,  //起點                ry:(canvas.height)/2,  //起點                cr: (canvas.width)/4, //半徑                startAngle:-(1/2*Math.PI),               //開始角度                endAngle:(-(1/2*Math.PI)+2*Math.PI),     //結束角度                xAngle:1*(Math.PI/180)                   //偏移量            };        }        //畫圓        var tmpAngle = -(1/2*Math.PI);        var ds = null;        var sum = data[0]['sales'][0]+data[0]['sales'][1]+data[0]['sales'][2]+data[0]['sales'][3]        var percent1 = data[0]['sales'][0]/sum * Math.PI * 2 ;        var percent2 = data[0]['sales'][1]/sum * Math.PI * 2 + percent1;        var percent3 = data[0]['sales'][2]/sum * Math.PI * 2 + percent2;        var percent4 = data[0]['sales'][3]/sum * Math.PI * 2 + percent3;        console.log(percent1);        console.log(percent2);        console.log(percent3);        console.log(percent4);        var tmpSum = 0;        var drawCircle = function(){                                    if(tmpAngle >= ds.endAngle)            {                return false;            }            else if(tmpAngle+ ds.xAngle > ds.endAngle)            {                tmpAngle = ds.endAngle;            }            else{                tmpAngle += ds.xAngle;                tmpSum += ds.xAngle            }            // console.log(ds.startAngle+'***'+tmpAngle);            // console.log(tmpSum);            // ctx.clearRect(ds.x,ds.y,canvas.width,canvas.height);                        if(tmpSum > percent1 && tmpSum <percent2)            {                ctx.beginPath();                ctx.moveTo(ds.r,ds.ry);                ctx.arc(ds.r,ds.ry,ds.cr,ds.startAngle+percent1,tmpAngle);                            ctx.fillStyle = ds.p2;            }            else if(tmpSum > percent2 && tmpSum <percent3)            {                ctx.beginPath();                ctx.moveTo(ds.r,ds.ry);                ctx.arc(ds.r,ds.ry,ds.cr,ds.startAngle+percent2,tmpAngle);                ctx.fillStyle = ds.p3;            }            else if(tmpSum > percent3 )            {                ctx.beginPath();                ctx.moveTo(ds.r,ds.ry);                ctx.arc(ds.r,ds.ry,ds.cr,ds.startAngle+percent3,tmpAngle);                ctx.fillStyle = ds.p4;            }            else{                ctx.beginPath();                ctx.moveTo(ds.r,ds.ry);                ctx.arc(ds.r,ds.ry,ds.cr,ds.startAngle,tmpAngle);                ctx.fillStyle = ds.p1;            }            ctx.closePath();            ctx.fill();            requestAnimationFrame(drawCircle);        }        this.toDraw = function(){            ds= defaultStyle(dom_circle,canvas);            // console.log(tmpAngle);            // console.log(ds.xAngle)            ctx.clearRect(ds.x,ds.y,canvas.width,canvas.height);            drawCircle();        }        this.toDraw();        var self = this;        window.onresize = function(){            self.toDraw()        }    }})(window);    </script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
欧美日韩日本视频| 亚洲大片免费看| 亚洲国产www| 欧美日韩中文字幕在线| 欧美三级免费观看| 色www精品视频在线观看| 国产成人精品三级| 欧美国产三级| 国产福利一区在线观看| 国产在线视频一区二区| 最近中文字幕日韩精品| 一区二区在线观| va中文字幕| 中文字幕第一页在线播放| 久久久精品福利| 中文字幕日韩第一页| eeuss一区| 国产欧美在线观看| 不卡在线视频| 国产欧美日产一区| 午夜黄色小视频| 最新中文在线视频| 午夜伊人狠狠久久| 亚洲国产欧美日韩在线| 欧美日韩亚洲国内综合网| 日韩三区免费| 91精品国产综合久久久久久漫画 | 在线视频不卡一区二区| wwwww亚洲| 二区三区中文字幕| 最新中文字幕在线| 尤物av一区二区| 日韩欧美综合在线| 日本黄色一区二区| 日韩精品资源二区在线| 欧美日韩精品欧美日韩精品 | www.三级.com| 欧美日韩高清不卡| 欧美日韩一区二区在线视频| 中文 欧美 日韩| 亚洲综合在线视频| 在线视频你懂得一区| aaa免费看大片| 欧美色欧美亚洲高清在线视频| 玖玖在线免费视频| 日韩精品手机在线| 欧美日韩视频免费播放| 欧美日韩视频不卡| 在线欧美日韩国产| 欧美在线观看视频一区| 色综合久久88色综合天天免费| 欧美日韩免费视频| 一区二区三区视频网站| 视频在线一区二区| 91精品国产综合久久久久久 | 不卡视频一区二区三区| 亚洲羞羞网站| 一区二区高清视频| 视频一区三区| 精品视频999| 亚洲高清中文字幕| 中文字幕国产日韩| 精品久久在线| 精人妻一区二区三区| 国产福利久久久| 欧美日韩免费精品| 樱花草www在线| 最近免费中文字幕在线第一页| 中文字幕在线观看欧美| 精品国产乱码久久久久久牛牛| 中文字幕欧美日韩精品| 午夜视频在线观看一区| 日韩国产一区| 亚洲福利精品视频| 久久精品国产视频| 不卡一二三区| 国产一级免费| 日韩欧美中文字幕在线播放| 日韩精品手机在线| 一区二区三区在线免费| 一区二区三区久久| 亚洲国产福利视频| 国产激情久久久| 91精品国产全国免费观看| 欧美三级中文字幕在线观看| 日韩在线二区| 国产在线日韩欧美| 欧美 日韩 综合| av首页在线| 日韩欧美久久久| 一区二区欧美国产| 日韩在线中文视频| 一区二区三区视频网站| 91久久精品国产91性色69| 偷窥国产亚洲免费视频| 国产香蕉精品视频| 欧美日韩国产一区在线| 欧美日韩国产高清| 国产无遮挡在线视频免费观看| 久久精品免费看| 黄色一级大片在线免费看国产一| 99精品人妻国产毛片| 色www精品视频在线观看| 91精品国产色综合久久不卡蜜臀| 国产乱国产乱老熟300部视频| 国产日韩1区| 伊人网站在线| 天堂在线中文| wwwwww国产| 中文字幕亚洲欧美| 国产欧美亚洲一区| 亚洲三级国产| 欧美久久久网站| 日韩综合精品| 日韩欧美国产不卡| 亚洲一区中文字幕在线| 日韩精品视频免费播放| 日韩欧美久久久| 久久精品人妻一区二区三区| 丰满少妇一区| 国产高清视频一区二区| 日韩在线高清| 亚洲精华国产欧美| 亚洲 欧美 中文字幕| 日韩美女中文字幕| 中文字幕亚洲乱码| 中文字幕2020第一页| 在线资源av| 亚洲福利在线视频| 久久综合久久综合九色| 精品亚洲国内自在自线福利| 日韩中文欧美在线| 精品在线一区二区| 欧美中日韩在线| 国产蜜臀在线| 精品网站999| 色综合天天性综合| 日韩视频在线观看视频| 欧美日韩中文字幕日韩欧美| 国产欧美日韩成人| 日韩欧美三级在线| 国产对白在线| 国产成人精品免费网站| 一区二区不卡视频在线观看| 日韩欧美中文| 人人做人人澡人人爽欧美| 中文字幕 亚洲视频| 久草视频观看| www.久久草| 国产成人精品综合网站| 中文字幕久久精品| 精品不卡一区二区| 国产福利一区在线观看| 欧美日韩国产第一页| 日韩三级视频中文字幕| 中文字幕 亚洲一区| 亚洲人成欧美中文字幕| 国产一卡2卡3卡免费网站| 久久精品欧美日韩精品| 欧美日韩在线不卡一区| 欧美日韩一二| 7799精品视频天天看| 欧美一级手机免费观看片 | 精品久久久精品| 一级片免费在线| 日韩欧美三级视频| 久久91精品久久久久久秒播| 国产最新在线| 国产乱码在线观看| 99精品视频99| 欧美一级免费看| 国产高清精品二区| 欧美日韩国产免费观看| 影音先锋一区二区资源站| 欧美激情视频一区二区三区在线播放| 久久精品99久久久久久久久| 欧美亚洲专区| 欧美精品一区二区三区在线播放| 精品一二三区视频| 日韩欧美在线1卡| 天天摸日日摸狠狠添| 欧美日韩激情一区二区三区| av亚洲免费| 最近高清中文在线字幕在线观看1| 日韩欧美中文字幕一区| 日韩www在线| 欧美日韩第一区日日骚| 欧美91精品| 国产欧美综合在线观看第十页| 国产手机精品视频| 精品人妻一区二区免费视频| 中文字幕在线视频日韩| 亚洲素人一区二区| 日韩.欧美.亚洲| 国产永久在线观看| 日韩视频一区| 国产成人精品日本亚洲专区61| 三级精品视频| 亚洲高清中文字幕| 亚洲一区中文字幕在线观看| 久久久久久自在自线| 日韩国产高清一区| 欧美日韩亚洲天堂| 亚洲一区三区在线观看| 日韩中文字幕在线一区| 91xxx在线观看| 一区二区中文视频| 国产一级粉嫩xxxx| 日韩免费视频一区二区| 久久永久免费视频| 亚洲免费在线视频一区 二区| 中文字幕日韩免费视频| 中文字幕精品在线| 国产日韩精品在线| 快she精品国产999| 中文字幕亚洲区| 国产日韩在线亚洲字幕中文| www.三级.com| 日韩欧美中文在线| 精品在线99| 欧美日韩国产综合视频在线观看| 国产在线不卡一区| 国产v日产∨综合v精品视频| 久草视频观看| 麻豆一区二区99久久久久| 中文字幕久久精品| 国产99在线 | 亚洲| 国产小视频在线| 国产午夜精品视频| 在线观看一区日韩| 三级精品视频| 精品九九久久| 在线中文字幕视频| 久久久精品福利| 日韩在线视频中文字幕| 欧美日韩精品是欧美日韩精品| 精品久久久久久无| 激情综合色综合久久| 91精品婷婷国产综合久久| 日韩欧美高清在线| 99久久久精品免费观看国产| 97久久精品午夜一区二区| 日韩国产成人| 欧美日韩在线不卡一区| 亚洲国产午夜精品| 九九视频精品免费| 亚洲综合在线视频| 亚洲男人在线| 亚洲社区在线| 日韩国产在线不卡视频| 欧美日韩人人澡狠狠躁视频| 韩国av一区二区| 日韩精品视频免费| 国产在线观看91| 中文字幕 乱码 中文乱码91| 国产99在线 | 亚洲| 国产免费永久在线观看| 99这里有精品视频| 中文字幕欧美亚洲| 精品av中文字幕在线毛片| 欧美日韩国产第一页| 精品精品久久| 中文字幕久精品免费视频| 91精品久久久久久蜜臀| 日韩久久在线| 国产高清视频一区二区| 一级日本免费的| 日韩欧美国产三级| 91精选在线| 亚洲视频日韩| 国产精品一区二三区| 日韩视频在线一区二区| 久久久精品日韩欧美| 国产一卡2卡3卡四卡网站| 国产欧美日韩在线视频| 在线观看国产福利视频| 国产偷国产偷亚洲清高网站| 一区在线免费| 日韩欧美在线综合网| 黄色国产网站在线播放| 国产精品福利视频一区二区三区| 午夜国产福利一区二区| 精品国产乱码一区二区| 日韩欧美亚洲视频| 国产福利三区| 欧美日韩亚洲一区| 日韩中文在线中文网三级| 精品1区2区3区| 日韩av一区在线| 亚洲免费看av| 99在线国产| 亚洲大片精品永久免费| 欧美日韩乱国产| aaa欧美日韩| 九一精品国产| 日韩中文字幕观看| 欧美日韩精品电影| 亚洲一区三区在线观看| 欧美日韩在线第一页| 午夜亚洲福利| 亚洲а∨精品天堂在线| 免费精品国产自产拍在| 亚洲国产午夜精品| 欧美日韩精品在线视频| 日韩在线a电影| 国产三级视频在线播放线观看| 久久久91精品国产| 黄色一区二区视频| 国产三级在线| 欧洲精品二区| 精品亚洲永久免费| 日本一级一片免费视频| 蜜桃久久久久| 三级网站免费观看| 69av亚洲| 久久精品国产视频| 日韩欧美不卡| 国产欧美久久久精品免费| 婷婷综合福利| 不卡在线一区二区| 日韩精品中文字幕第1页| 一区二区三区鲁丝不卡| 中文在线视频观看| 一区二区日韩视频| 免费在线观看国产黄| 午夜国产视频| 欧美日韩精品在线播放| 久久精品久久精品国产大片| 国产69精品久久久久孕妇国产69久久| 欧美自拍一区| 国产成人精品网址| 日韩欧美中文在线| 国产一二三区精品视频| 久久精品国产91精品亚洲| 国产永久在线观看| 精品全国在线一区二区| 欧美日韩精品电影| 亚洲免费婷婷| 国产九九在线| 精品久久在线观看| 欧美三级日韩在线| 国产资源在线观看入口av| 亚洲高清免费一级二级三级| 亚欧成人精品| 欧美日韩综合视频| 久久精品久久久久| 老司机久久99久久精品播放免费| 欧美亚洲天堂网| 国产欧美日韩精品在线观看| 欧美亚洲专区| 日韩在线中文视频| 一级片在线免费看| 国产日韩中文字幕在线| 精品视频999| 在线一区免费| 日韩国产成人| 黄色资源在线观看| 亚洲大胆人体av| 精品一区二区三区中文字幕在线| 免费在线视频一级不卡| 99在线国产| 影音先锋中文字幕在线观看| 91精品国产经典在线观看| 在线资源av| 亚洲免费视频一区| 在线欧美日韩国产| 久久激情一区| 蜜桃久久久久| 久久99久久久久久久噜噜| 日本一欧美一欧美一亚洲视频| 精品欧美日韩精品| 国产第一页在线播放| 欧美三级日韩三级| 国产一区精品在线| 天天综合天天添夜夜添狠狠添| 中文字幕精品一区二区三区在线| 欧美日韩日本视频| 午夜亚洲一区| 成人无遮挡免费网站视频在线观看| 欧美日韩国产首页| 久久激情一区| 国产日韩精品电影| 欧美日韩精品综合| 99综合视频| 亚洲一区视频在线观看视频| 久久99精品久久久久子伦| 国产日韩精品在线| 日韩一级精品| 欧美日韩亚洲视频| 国产调教精品| 在线国产99| 日韩精品视频在线看| 日韩视频国产视频| 亚欧成人精品| 一区二区精品免费| 亚洲欧美韩国综合色| 亚洲欧美小说国产图片| 亚洲综合视频一区| 一区二区三区四区五区视频在线观看| 午夜福利一区二区三区|