电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript 繪制餅圖的示例

瀏覽:102日期:2023-10-03 18:02:48
繪制效果

JavaScript 繪制餅圖的示例

實現代碼JavaScript

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 ONEvar 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 loopanimate(step);html

<canvas id='mycanvas'></canvas>

以上就是JavaScript 繪制餅圖的示例的詳細內容,更多關于JavaScript 繪制餅圖的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 广东西屋电气有限公司-广东西屋电气有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 步入式高低温测试箱|海向仪器 | 北京开源多邦科技发展有限公司官网| 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 专业音响设备_舞台音响设备_会议音响工程-首选深圳一禾科技 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 |