一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JavaScript 繪制餅圖的示例

JavaScript 繪制餅圖的示例

2022-01-21 15:52MwqgKG js教程

這篇文章主要介紹了JavaScript 繪制餅圖的示例,幫助大家更好的利用JavaScript繪制圖表,感興趣的朋友可以了解下

繪制效果

JavaScript 繪制餅圖的示例

實現代碼

JavaScript

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
var canvas = document.getElementById("mycanvas");
var w = window.innerWidth;
var h = window.innerHeight;
canvas.height = 1000;
canvas.width = 1400;
var ctx = canvas.getContext('2d');
 
var poppable = true;
 
var slices = [];
 
function shadeColor(color, percent) {
 var f = parseInt(color.slice(1), 16),
  t = percent < 0 ? 0 : 255,
  p = percent < 0 ? percent * -1 : percent,
  R = f >> 16,
  G = f >> 8 & 0x00FF,
  B = f & 0x0000FF;
 return "#" + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1);
}
 
function pieSlice(oX, oY, r, pos, len, col,data) {
 this.data = data
 this.originX = oX;
 this.originY = oY;
 this.radius = r;
 this.startingRadian = pos;
 this.length = len;
 this.color = col;
 this.highlightedColor = shadeColor(this.color, .6);
 this.highlighted = false;
 this.popped = false;
 this.animationFrame = 0;
 
 function setColor(c) {
  this.color = c;
 }
}
 
pieSlice.prototype.displayData = function(){
 ctx.fillStyle= this.color;
 ctx.fillRect(this.originX - this.radius - 40, this.originY-this.radius-35, 25,25);
 ctx.fillStyle= "white";
 ctx.font = "15px Arial";
 ctx.fillText(this.data, this.originX - this.radius - 10, this.originY - this.radius - 18);
}
 
pieSlice.prototype.render = function() {
 if (!this.highlighted) {
  ctx.fillStyle = this.color;
  ctx.strokeStyle = this.color;
 } else {
  if(!this.popped && poppable){
   this.displayData();
  }
  // ctx.fillStyle = this.color;
  ctx.fillStyle = this.highlightedColor;
  ctx.strokeStyle = this.color;
 }
 ctx.beginPath();
 var xOffset = Math.cos(this.length / 2 + this.startingRadian) * this.animationFrame;
 var yOffset = Math.sin(this.length / 2 + this.startingRadian) * this.animationFrame;
 ctx.moveTo(this.originX + xOffset, this.originY + yOffset);
 var x = this.originX + xOffset + this.radius * Math.cos(this.startingRadian);
 var y = this.originY + yOffset + this.radius * Math.sin(this.startingRadian);
 ctx.lineTo(x, y);
 ctx.arc(this.originX + xOffset, this.originY + yOffset, this.radius, this.startingRadian, this.startingRadian + this.length);
 if (this.popped) {
  var fill = ctx.fillStyle;
  this.displayData();
  ctx.fillStyle = fill;
  if (this.animationFrame < 30) {
   this.animationFrame += 2;
  }
 } else {
  if (this.animationFrame > 0) {
   this.animationFrame -= 2;
  }
 }
 ctx.closePath();
 //ctx.stroke();
 //if (this.highlighted) {
 ctx.fill();
 // }
}
 
pieSlice.prototype.update = function() {
 
}
 
function pieChart(s) {
 this.slices = s;
}
pieChart.prototype.render = function() {
 this.slices.forEach(function(p) {
  p.render();
 });
};
 
pieChart.prototype.update = function() {
  this.slices.forEach(function(p) {
   p.update();
  });
 
 }
 //PIE ONE
var pie = new pieSlice(700, 170, 125, 0, Math.PI / 4, "#FFD1DC", 12);
var slice2 = new pieSlice(700, 170, 125, Math.PI / 4, Math.PI / 4, "#08E8DE");
var slice3 = new pieSlice(700, 170, 125, Math.PI / 2, Math.PI / 4, "#6699CC");
var slice4 = new pieSlice(700, 170, 125, 3 * Math.PI / 4, Math.PI, "#ADD8E6");
var slice5 = new pieSlice(700, 170, 125, 7 * Math.PI / 4, Math.PI / 4, "#B19CD9");
var slices1 = [pie, slice2, slice3, slice4, slice5];
 
var pink = new pieSlice(220, 170, 125, 0, Math.PI / 3, "#FF4B4B");
var orange = new pieSlice(220, 170, 125, Math.PI / 3, Math.PI / 3, "#FF931B");
var yellow = new pieSlice(220, 170, 125, 2 * Math.PI / 3, Math.PI / 3, "#FFE21B");
var green = new pieSlice(220, 170, 125, 3 * Math.PI / 3, Math.PI / 3, "#90E64E");
var blue = new pieSlice(220, 170, 125, 4 * Math.PI / 3, Math.PI / 3, "#6097D9");
var purple = new pieSlice(220, 170, 125, 5 * Math.PI / 3, Math.PI / 3, "#8365DD");
 
var redd = new pieSlice(1180, 170, 125, 0, 2 * Math.PI / 3, "#B3989B");
var orangee = new pieSlice(1180, 170, 125, 2 * Math.PI / 3, 1 * Math.PI / 8, "#C1AEE0");
var bluee = new pieSlice(1180, 170, 125, 19 * Math.PI / 24, 4 * Math.PI / 24, "#928CE9");
var greenn = new pieSlice(1180, 170, 125, 23 * Math.PI/24, 3* Math.PI/8, "#676675");
var purplee = new pieSlice(1180, 170, 125, 4 * Math.PI/3, 3* Math.PI/8, "#947D59");
var ceci = new pieSlice(1180, 170, 125, 41 * Math.PI/24, 7*Math.PI/24, "#D994E0");
 
var slices3 = [redd, orangee, bluee, greenn, purplee, ceci];
 
var slices2 = [pink, orange, yellow, green, blue, purple];
var pie1 = new pieChart(slices1);
var pie2 = new pieChart(slices2);
var pie3 = new pieChart(slices3);
var update = function() {
 pie1.update();
}
var render = function() {
 ctx.clearRect(0, 0, canvas.width, canvas.height);
 pie1.render();
 pie2.render();
 pie3.render();
}
 
var step = function() {
 update();
 render();
 animate(step);
}
 
var animate = window.requestAnimationFrame ||
 window.webkitRequestAnimationFrame ||
 window.mozRequestAnimationFrame ||
 function(callback) {
  window.setTimeout(callback, 1000 / 60);
 };
 
slices.push.apply(slices, slices1);
slices.push.apply(slices, slices2);
slices.push.apply(slices, slices3);
 
canvas.addEventListener("mousemove", function(e) {
 var x = e.clientX;
 var y = e.clientY;
 slices.forEach(function(slice) {
  ctx.beginPath();
  var xOffset = Math.cos(slice.length / 2 + slice.startingRadian) * slice.animationFrame;
  var yOffset = Math.sin(slice.length / 2 + slice.startingRadian) * slice.animationFrame;
  ctx.moveTo(slice.originX + xOffset, slice.originY + yOffset);
  var xx = slice.originX + xOffset + slice.radius * Math.cos(slice.startingRadian);
  var yy = slice.originY + yOffset + slice.radius * Math.sin(slice.startingRadian);
  ctx.lineTo(xx, yy);
  ctx.arc(slice.originX + xOffset, slice.originY + yOffset, slice.radius, slice.startingRadian, slice.startingRadian + slice.length);
  if (ctx.isPointInPath(x, y)) {
   slice.highlighted = true;
   slice.displayData();
  } else {
   slice.highlighted = false;
  }
  ctx.closePath();
 
 });
});
 
canvas.addEventListener("click", function(e) {
 var x = e.clientX;
 var y = e.clientY;
 slices.forEach(function(slice) {
  ctx.beginPath();
  var xOffset = Math.cos(slice.length / 2 + slice.startingRadian) * slice.animationFrame;
  var yOffset = Math.sin(slice.length / 2 + slice.startingRadian) * slice.animationFrame;
  ctx.moveTo(slice.originX + xOffset, slice.originY + yOffset);
  var xx = slice.originX + xOffset + slice.radius * Math.cos(slice.startingRadian);
  var yy = slice.originY + yOffset + slice.radius * Math.sin(slice.startingRadian);
  ctx.lineTo(xx, yy);
  ctx.arc(slice.originX + xOffset, slice.originY + yOffset, slice.radius, slice.startingRadian, slice.startingRadian + slice.length);
  if (ctx.isPointInPath(x, y)) {
   if (slice.popped) {
    slice.popped = false;
    poppable = true;
   } else {
    if(poppable){
      slice.popped = true;
     poppable = false;
    }
   }
   slice.highlighted = false;
  }
  ctx.closePath();
 
 });
});
 
//start the loop
animate(step);

html

?
1
<canvas id="mycanvas"></canvas>

以上就是JavaScript 繪制餅圖的示例的詳細內容,更多關于JavaScript 繪制餅圖的資料請關注服務器之家其它相關文章!

原文鏈接:https://codepen.io/brgirardeau/pen/MwqgKG

延伸 · 閱讀

精彩推薦
  • js教程原生js實現下拉框選擇組件

    原生js實現下拉框選擇組件

    這篇文章主要為大家詳細介紹了原生js實現下拉框選擇組件的開發,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    蒲公英芽4352022-01-05
  • js教程javascript實現數字時鐘效果

    javascript實現數字時鐘效果

    這篇文章主要為大家詳細介紹了javascript實現數字時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一顆不甘墜落的流星11822022-01-17
  • js教程JavaScript如何實現防止重復的網絡請求的示例

    JavaScript如何實現防止重復的網絡請求的示例

    這篇文章主要介紹了JavaScript如何實現防止重復的網絡請求的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    Daes11112022-01-10
  • js教程Selenium執行JavaScript腳本的方法示例

    Selenium執行JavaScript腳本的方法示例

    這篇文章主要介紹了Selenium執行JavaScript腳本的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    測試開發小記6402021-12-23
  • js教程JavaScript 防盜鏈的原理以及破解方法

    JavaScript 防盜鏈的原理以及破解方法

    這篇文章主要介紹了JavaScript 防盜鏈的原理以及破解方法,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    LuckyChou10342021-12-22
  • js教程js刪除對象中的某一個字段的方法實現

    js刪除對象中的某一個字段的方法實現

    這篇文章主要介紹了js刪除對象中的某一個字段的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    兔子零847352021-12-29
  • js教程JS中箭頭函數與this的寫法和理解

    JS中箭頭函數與this的寫法和理解

    這篇文章主要給大家介紹了關于JS中箭頭函數與this的寫法和理解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    limingru10422021-12-31
  • js教程關于javascript中的promise的用法和注意事項(推薦)

    關于javascript中的promise的用法和注意事項(推薦)

    這篇文章主要介紹了關于javascript中的promise的用法和注意事項,需要的朋友可以參考下...

    miyui8192021-12-31
主站蜘蛛池模板: 男女一级簧色带 | juliaann主妇疯狂| 国内自拍网红在线综合 | 亚洲天堂h | 久久青青草视频在线观 | 黑人粗长巨茎小说 | 能播放的欧美同性videos | 国产一卡二卡3卡4卡四卡在线视频 | 久久99re热在线观看视频 | 丝袜兔女郎被啪在线观看91 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 免费一级毛片在线播放 | 2015台湾永久免费平台 | 午夜神器18以下不能进免费 | 激情综合站 | 久久久久琪琪精品色 | 操一炮| 国内自拍第1页 | 免费高清www动漫视频播放器 | 国产精品日本一区二区不卡视频 | avtt在线| 国产精品aaa | 日本免费精品视频 | 国产欧美综合精品一区二区 | 亚洲va精品中文字幕 | 欧美人禽杂交在线视频 | 国产高清在线不卡 | 激情综合 | 奇米777狠狠 | 精品丰满人妻无套内射 | 男人把大ji巴放进男人免费视频 | 日本三级免费网站 | 成人免费视频一区二区 | 4438全国最大成人网视频 | 精品一区二区视频 | 婷婷九月| 贰佰麻豆剧果冻传媒一二三区 | 国产在视频线精品视频 | 97操| 青柠网在线观看视频 | narutotsunade全彩雏田 |