校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 利用html5 canvas動態(tài)畫餅狀圖的示例代碼

利用html5 canvas動態(tài)畫餅狀圖的示例代碼

熱門標(biāo)簽:ai電銷機(jī)器人連接網(wǎng)關(guān) 鶴壁手機(jī)自動外呼系統(tǒng)怎么安裝 中紳電銷智能機(jī)器人 跟電銷機(jī)器人做同事 濟(jì)南辦理400電話 威海營銷外呼系統(tǒng)招商 漳州人工外呼系統(tǒng)排名 農(nóng)村住宅地圖標(biāo)注 鄭州電銷外呼系統(tǒng)違法嗎

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

先來看效果圖

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

canvas畫圓大體分為實(shí)心圓和空心圓。

根據(jù)需求分析知道該圓為實(shí)心圓。

1.先用canvas畫實(shí)心圓

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

2.根據(jù)不同顏色繪制餅狀圖

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

3.動態(tài)繪制餅狀圖

動態(tài)繪制圓網(wǎng)上普遍推薦三種方法:requestAnimationFrame、setInterval(定時(shí))、還有動態(tài)算角度的。

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

在編寫的過程中發(fā)現(xiàn)一個(gè)問題,就是動態(tài)畫圓時(shí)并不是以圓心的坐標(biāo)畫的。為了解決這一問題,需要在每次畫圓時(shí)重新將canvas的畫筆的坐標(biāo)定義為最初圓心的坐標(biāo)。

<!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":"產(chǎn)品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":"產(chǎn)品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":"產(chǎn)品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":"產(chǎn)品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;
            }
            //坐標(biāo)軸區(qū)域
            //注意,實(shí)際畫折線圖區(qū)域還要比這個(gè)略小一點(diǎn)
            return {
                p1:'green',
                p2:'red',
                p3:'yellow',
                p4:'purple',
                x: 0 ,    //坐標(biāo)軸在canvas上的left坐標(biāo)
                y: 0 ,    //坐標(biāo)軸在canvas上的top坐標(biāo)
                maxX: canvas.width ,   //坐標(biāo)軸在canvas上的right坐標(biāo)
                maxY: canvas.height ,   //坐標(biāo)軸在canvas上的bottom坐標(biāo)
                r:(canvas.width)/2,  //起點(diǎn)
                ry:(canvas.height)/2,  //起點(diǎn)
                cr: (canvas.width)/4, //半徑
                startAngle:-(1/2*Math.PI),               //開始角度
                endAngle:(-(1/2*Math.PI)+2*Math.PI),     //結(jié)束角度
                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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:咸陽 營口 甘南 蘇州 萍鄉(xiāng) 紅河 文山 惠州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《利用html5 canvas動態(tài)畫餅狀圖的示例代碼》,本文關(guān)鍵詞  利用,html5,canvas,動態(tài),畫,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用html5 canvas動態(tài)畫餅狀圖的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于利用html5 canvas動態(tài)畫餅狀圖的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    午夜在线电影亚洲一区| 久久久欧美精品sm网站| 天堂成人免费av电影一区| 一色桃子久久精品亚洲| 久久亚洲一区二区三区明星换脸| 日韩av不卡一区二区| 国产欧美日韩视频一区二区 | 久久久精品免费免费| 精品免费国产一区二区三区四区| 欧美一区二区成人| 欧美精品一区二区不卡| 国产精品免费视频一区| 麻豆成人免费电影| 国产乱码一区二区三区| 91色在线porny| 日韩一区二区电影| 国产精品欧美一区二区三区| 亚洲福利视频三区| 国产一区二区三区精品欧美日韩一区二区三区 | 视频一区视频二区中文| 国产一区二区三区最好精华液| 91丨porny丨国产入口| 69久久夜色精品国产69蝌蚪网| 国产亚洲女人久久久久毛片| 亚洲国产视频a| 国产高清亚洲一区| 884aa四虎影成人精品一区| 国产精品免费视频网站| 美女视频免费一区| 欧洲激情一区二区| 国产免费成人在线视频| 日韩精品电影在线观看| 成人app网站| 欧美精品一区二区三区一线天视频| 亚洲欧美偷拍卡通变态| 国产在线精品免费av| 欧美日韩你懂得| 国产精品国产三级国产三级人妇| 久久精品国产久精国产| 欧美亚洲国产一区在线观看网站 | 国产一区二区三区综合| 欧美日韩一区中文字幕| 国产精品理伦片| 国产制服丝袜一区| 911国产精品| 一区二区高清在线| 99久久国产综合色|国产精品| 精品国产麻豆免费人成网站| 亚洲成人免费电影| av不卡免费在线观看| 久久亚洲春色中文字幕久久久| 日本美女一区二区| 欧美性生活久久| 亚洲三级在线播放| 成人美女视频在线看| 26uuu成人网一区二区三区| 天堂久久久久va久久久久| 一本一道久久a久久精品综合蜜臀| 国产亚洲欧洲一区高清在线观看| 日本91福利区| 欧美一区二区三区在线观看 | 日本韩国欧美三级| 国产精品午夜免费| 国产乱码精品1区2区3区| 精品免费视频.| 另类欧美日韩国产在线| 欧美一区二区三区日韩视频| 亚洲成人免费电影| 欧美老年两性高潮| 亚洲成av人片一区二区三区| 欧美系列在线观看| 亚洲一区二三区| 欧美亚洲国产一区在线观看网站| 亚洲综合一区二区| 欧美色视频一区| 亚洲一区二区三区四区中文字幕| 色婷婷综合久久久中文字幕| 亚洲三级免费电影| 在线观看一区日韩| 亚洲一二三区视频在线观看| 欧美色图12p| 五月婷婷综合激情| 制服丝袜亚洲色图| 六月丁香婷婷久久| 国产亚洲婷婷免费| 91在线精品秘密一区二区| 亚洲天堂成人网| 欧美综合一区二区| 日韩在线卡一卡二| 欧美成人欧美edvon| 国产一区不卡视频| 中文字幕一区二区在线观看| 91亚洲精华国产精华精华液| 一区二区三区在线视频观看 | 亚洲国产中文字幕| 欧美精品aⅴ在线视频| 六月丁香婷婷色狠狠久久| 久久久精品欧美丰满| eeuss鲁一区二区三区| 亚洲精品免费在线| 正在播放一区二区| 国产一区二区在线看| 国产日韩欧美麻豆| 99精品国产视频| 性欧美疯狂xxxxbbbb| 日韩片之四级片| 成人国产在线观看| 午夜亚洲国产au精品一区二区| 欧美sm极限捆绑bd| 成人黄色综合网站| 亚洲一区二区欧美| 精品久久久影院| 99久久综合国产精品| 亚洲成人在线免费| 久久久久高清精品| 欧美三级韩国三级日本三斤| 麻豆91精品视频| 国产精品狼人久久影院观看方式| 欧美日韩激情一区| 国产伦精品一区二区三区视频青涩 | 另类欧美日韩国产在线| 国产欧美日韩精品一区| 欧美亚洲另类激情小说| 国产一区二区美女| 亚洲已满18点击进入久久| 日韩美女一区二区三区四区| www.亚洲人| 日韩电影免费在线看| 国产欧美日韩综合精品一区二区 | 亚洲一区在线看| 日韩一区二区影院| 91亚洲大成网污www| 免费人成黄页网站在线一区二区| 国产精品不卡视频| 日韩网站在线看片你懂的| 成人avav影音| 精品在线你懂的| 亚洲一区二区三区三| 亚洲精品在线观看视频| 91福利在线播放| 高潮精品一区videoshd| 视频一区欧美日韩| 亚洲免费成人av| 久久综合九色综合97婷婷女人| 91黄色在线观看| 成人综合婷婷国产精品久久免费| 舔着乳尖日韩一区| 亚洲乱码国产乱码精品精98午夜| 久久久久久久综合| 91麻豆精品国产91| 色婷婷狠狠综合| 国产999精品久久久久久| 日韩有码一区二区三区| 亚洲欧洲在线观看av| 精品播放一区二区| 欧美高清hd18日本| 在线一区二区三区四区五区 | 亚洲图片另类小说| 久久亚区不卡日本| 日韩欧美国产午夜精品| 欧美三级日本三级少妇99| 91亚洲国产成人精品一区二三| 国产精品一区二区三区99| 麻豆国产91在线播放| 日韩激情av在线| 亚洲一级电影视频| 亚洲免费色视频| 成人欧美一区二区三区在线播放| 久久精品一区二区三区不卡 | 看电视剧不卡顿的网站| 亚洲成人777| 午夜精品国产更新| 亚洲综合色成人| 亚洲乱码国产乱码精品精小说| 中文字幕在线不卡一区二区三区| 日本一二三不卡| 国产日韩欧美一区二区三区综合| 久久综合狠狠综合久久激情| 日韩欧美国产午夜精品| 日韩视频免费观看高清在线视频| 欧美精品亚洲一区二区在线播放| 欧美性一二三区| 欧美精品vⅰdeose4hd| 欧美理论片在线| 日韩三级视频在线看| 日韩精品一区二区三区四区视频| 日韩视频免费观看高清完整版 | 麻豆一区二区在线| 日本亚洲电影天堂| 久久丁香综合五月国产三级网站| 美女视频一区二区| 精品一区二区综合| 国产成人午夜视频| 99久久精品免费| 在线影院国内精品| 91精品国产免费| 欧美www视频| 国产农村妇女毛片精品久久麻豆| 国产精品午夜春色av| 亚洲精品久久久蜜桃|