广告
返回顶部
首页 > 资讯 > 精选 >使用JavaScript怎么绘制一个饼图
  • 377
分享到

使用JavaScript怎么绘制一个饼图

2023-06-06 11:06:44 377人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关使用javascript怎么绘制一个饼图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实现代码JavaScriptvar canvas =&n

这篇文章将为大家详细讲解有关使用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怎么绘制一个饼图就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 使用JavaScript怎么绘制一个饼图

本文链接: https://www.lsjlt.com/news/246469.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用JavaScript怎么绘制一个饼图
    这篇文章将为大家详细讲解有关使用JavaScript怎么绘制一个饼图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实现代码JavaScriptvar canvas =&n...
    99+
    2023-06-06
  • 使用R语言怎么绘制一个饼状图
    今天就跟大家聊聊有关使用R语言怎么绘制一个饼状图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、...
    99+
    2023-06-14
  • 使用python怎么绘制一个茎叶图和复合饼图
    这篇文章将为大家详细讲解有关使用python怎么绘制一个茎叶图和复合饼图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。茎叶图from itertools import&n...
    99+
    2023-06-06
  • 怎么使用Vue+Echarts绘制饼图
    这篇文章主要介绍“怎么使用Vue+Echarts绘制饼图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vue+Echarts绘制饼图”文章能帮助大家解决问题。1 引入Echarts1.1 安...
    99+
    2023-07-05
  • 怎么用python绘制饼图和直方图
    本篇内容介绍了“怎么用python绘制饼图和直方图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#饼图,常与结构分析结合使用import&n...
    99+
    2023-06-30
  • 使用javascript怎么绘制一个方块
    本篇文章为大家展示了使用javascript怎么绘制一个方块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html中插入javascript画矩形<!DOCTYPE <!DOC...
    99+
    2023-06-14
  • 使用canvas怎么绘制一个太极图
    今天就跟大家聊聊有关使用canvas怎么绘制一个太极图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。css样式代码.animation{  width: ...
    99+
    2023-06-09
  • 使用matplotlib怎么绘制一个阶梯图
    这篇文章将为大家详细讲解有关使用matplotlib怎么绘制一个阶梯图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。step函数概述step函数用于绘制阶梯图。根据源码可知,step函数是对...
    99+
    2023-06-06
  • 使用canvas怎么绘制一个心电图
    这期内容当中小编将会给大家带来有关使用canvas怎么绘制一个心电图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。思路:模拟点(如果你有真实的数据,那就是把数据幻化成canvas对应的坐标点)模拟点时注意...
    99+
    2023-06-09
  • 使用python怎么绘制一个折线图
    这篇文章将为大家详细讲解有关使用python怎么绘制一个折线图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注...
    99+
    2023-06-14
  • 使用python怎么绘制一个火山图
    今天就跟大家聊聊有关使用python怎么绘制一个火山图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整...
    99+
    2023-06-14
  • 怎么用R语言绘制饼图和条形图
    这篇文章给大家分享的是有关怎么用R语言绘制饼图和条形图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。R 语言提供来大量的库来实现绘图功能。饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百...
    99+
    2023-06-08
  • 使用JavaScript怎么绘制一个烟花效果
    这期内容当中小编将会给大家带来有关使用JavaScript怎么绘制一个烟花效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTML<!DOCTYPE html><html&n...
    99+
    2023-06-14
  • 怎么使用Python可视化神器pyecharts绘制饼状图
    这篇“怎么使用Python可视化神器pyecharts绘制饼状图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Pyt...
    99+
    2023-07-02
  • Python数据分析之怎么用Matplotlib绘制饼图
    这篇文章主要介绍“Python数据分析之怎么用Matplotlib绘制饼图”,在日常操作中,相信很多人在Python数据分析之怎么用Matplotlib绘制饼图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”P...
    99+
    2023-06-30
  • 使用R语言怎么绘制一个直方图
    使用R语言怎么绘制一个直方图?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。语法使用R语言创建直方图的基本语法是hist(v,main,xlab,xlim,ylim,brea...
    99+
    2023-06-14
  • linux中怎么使用Arduino制作一个绘图仪
    这篇文章主要介绍了linux中怎么使用Arduino制作一个绘图仪,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于我是一个很怀旧的人,我真的很喜欢最初的 Arduino U...
    99+
    2023-06-16
  • 使用R语言怎么绘制一个折线图
    这篇文章给大家介绍使用R语言怎么绘制一个折线图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在R中的通过使用plot()函数来创建线形图,语法如下:plot(v,type,col,xlab,ylab)参数描述如下:v ...
    99+
    2023-06-14
  • 使用Python怎么绘制一个棒棒糖图表
    本篇文章给大家分享的是有关使用Python怎么绘制一个棒棒糖图表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先读取一下数据。import pandas ...
    99+
    2023-06-15
  • 怎么用CSS3绘制一个月食图案
    本篇内容主要讲解“怎么用CSS3绘制一个月食图案”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用CSS3绘制一个月食图案”吧!画个月亮嘛,还是尝试用一个di...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作