Javascript 使用画布元素在鼠标上单击“分解切片”绘制圆环图
我需要你的帮助。我的要求是,需要绘制一个油炸圈饼图,带有explode(鼠标单击油炸圈饼中的特定切片)选项。我浏览了这个链接。但在这方面,他们使用了巨大的值来“线宽””并绘制dougnut切片。但是我想使用fillStyle填充每个切片,并使用线宽填充切片边框。所以我需要像画路径一样画每个切片。这样我就可以得到路径并在鼠标点击时分解每个切片。我使用了下面的代码。请任何人给我一个解决方案Javascript 使用画布元素在鼠标上单击“分解切片”绘制圆环图,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,我需要你的帮助。我的要求是,需要绘制一个油炸圈饼图,带有explode(鼠标单击油炸圈饼中的特定切片)选项。我浏览了这个链接。但在这方面,他们使用了巨大的值来“线宽””并绘制dougnut切片。但是我想使用fillStyle填充每个切片,并使用线宽填充切片边框。所以我需要像画路径一样画每个切片。这样我就可以得到路径并在鼠标点击时分解每个切片。我使用了下面的代码。请任何人给我一个解决方案 <script> $(function(){ var canvas=do
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
// define the donut
var cX = Math.floor(canvas.width / 2);
var cY = Math.floor(canvas.height / 2);
var radius = Math.min(cX,cY)*.75;
// the datapoints
var data=[];
data.push(67.34);
data.push(28.60);
data.push(1.78);
data.push(.84);
data.push(.74);
data.push(.70);
// colors to use for each datapoint
var colors=[];
colors.push("teal");
colors.push("rgb(165,42,42)");
colors.push("purple");
colors.push("green");
colors.push("cyan");
colors.push("gold");
// track the accumulated arcs drawn so far
var totalArc=0;
// draw a wedge
function drawWedge2(percent, color) {
// calc size of our wedge in radians
var WedgeInRadians=percent/100*360 *Math.PI/180;
// draw the wedge
ctx.save();
ctx.beginPath();
ctx.moveTo(cX, cY);
ctx.arc(cX, cY, radius, totalArc, totalArc+WedgeInRadians, false);
ctx.closePath();
ctx.fillStyle = color;
ctx.fill();
ctx.restore();
// sum the size of all wedges so far
// We will begin our next wedge at this sum
totalArc+=WedgeInRadians;
}
// draw the donut one wedge at a time
function drawDonut(){
for(var i=0;i<data.length;i++){
drawWedge2(data[i],colors[i]);
}
//Don't want to draw Arch inner the pie. It causes problem on explode slice
//cut out an inner-circle == donut
//ctx.beginPath();
//ctx.moveTo(cX,cY);
//ctx.fillStyle="white";
//ctx.arc(cX, cY, radius*.50, 0, 2 * Math.PI, false);
//ctx.fill();
}
// draw the background gradient
var gradient = ctx.createLinearGradient(0,0,canvas.width,0);
gradient.addColorStop(0, "#008B8B");
gradient.addColorStop(0.75, "#F5DEB3");
// draw the donut
drawDonut();
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=800 height=500></canvas>
</body>
$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
//定义甜甜圈
var cX=数学地板(canvas.width/2);
var cY=数学地板(画布高度/2);
变量半径=数学最小值(cX,cY)*.75;
//数据点
var数据=[];
数据推送(67.34);
数据推送(28.60);
数据推送(1.78);
数据推送(.84);
数据推送(.74);
数据推送(.70);
//用于每个数据点的颜色
var颜色=[];
颜色。推(“青色”);
颜色。推送(“rgb(165,42,42)”;
颜色。推(“紫色”);
颜色。推送(“绿色”);
颜色。推送(“青色”);
颜色。推送(“金色”);
//跟踪到目前为止绘制的累积弧
var totalArc=0;
//挖楔子
函数drawWedge2(百分比、颜色){
//楔形物的计算尺寸(弧度)
var WedgeInRadians=百分比/100*360*Math.PI/180;
//拔掉楔子
ctx.save();
ctx.beginPath();
ctx.moveTo(cX,cY);
ctx.弧(cX,cY,半径,总弧,总弧+楔形半径,假);
ctx.closePath();
ctx.fillStyle=颜色;
ctx.fill();
ctx.restore();
//求和到目前为止所有楔块的大小
//我们将从这个总数开始下一个楔子
总弧度+=楔形弧度;
}
//一次画一个楔子
函数drawDonut(){
对于(var i=0;iexplode意味着在单击该切片时,您希望将其删除或显示为更大的片段。我需要在鼠标单击时像这样进行分解。这与作者希望的不完全一样,但仍然是一种分解效果: