,,,,Pie Chart,, .slice {, position: absolute;, transform-origin: 50% 50%;, },,,,,,,,,,,
“
使用原生 JavaScript 绘制饼图
在不使用任何外部库的情况下,我们可以通过原生 JavaScript、HTML 和 CSS 来绘制一个饼图,以下是详细的步骤和示例代码:
1. 准备 HTML 结构
我们需要一个基本的 HTML 结构来容纳我们的饼图。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pie Chart with Native JavaScript</title> <style> #chart { width: 400px; height: 400px; position: relative; border-radius: 50%; border: 2px solid #ccc; } .slice { position: absolute; width: 100%; height: 100%; clip: rect(0px, 200px, 200px, 0px); } </style> </head> <body> <div id="chart"></div> <script src="piechart.js"></script> </body> </html>
2. 编写 JavaScript 逻辑
我们在piechart.js
文件中编写绘制饼图的逻辑。
document.addEventListener('DOMContentLoaded', function () { const data = [ { value: 30, color: '#FF6384' }, { value: 70, color: '#36A2EB' } ]; const total = data.reduce((acc, item) => acc + item.value, 0); let startAngle = 0; data.forEach(item => { const sliceAngle = (item.value / total) 2 Math.PI; const endAngle = startAngle + sliceAngle; const midAngle = startAngle + (sliceAngle / 2); const x = 50 + (Math.cos(midAngle) 100); const y = 50 + (Math.sin(midAngle) 100); const largeArcFlag = sliceAngle > Math.PI ? 1 : 0; const pathData = [M 50 50
,L ${x} ${y}
,A 50 50 0 ${largeArcFlag} 1 ${x} ${y}
,Z
].join(' '); const slice = document.createElementNS('http://www.w3.org/2000/svg', 'path'); slice.setAttribute('d', pathData); slice.setAttribute('fill', item.color); slice.className = 'slice'; document.getElementById('chart').appendChild(slice); startAngle = endAngle; }); });
3. 解释代码
我们创建了一个div
元素,ID 为chart
,用于容纳饼图。
通过内联样式设置了一些基本样式,包括宽度、高度、边框等。
clip
属性用于裁剪路径,使其呈现扇形效果。
使用DOMContentLoaded
事件确保在 DOM 完全加载后执行脚本。
定义了数据数组data
,每个对象包含value
(值)和color
(颜色)。
计算总值total
。
遍历数据数组,对于每个数据项:
计算起始角度startAngle
和结束角度endAngle
。
根据角度计算中间点坐标(x, y)
。
构建路径数据pathData
,包括移动到中心点、画线到边缘点、画弧回到中心点并闭合路径。
创建path
元素,设置其路径数据和填充颜色,然后添加到chart
容器中。
更新startAngle
为当前切片的结束角度。
FAQs
A1: 你只需要修改data
数组中的值和颜色即可,如果你有三个数据项,你可以这样修改:
const data = [ { value: 20, color: '#FF6384' }, { value: 30, color: '#36A2EB' }, { value: 50, color: '#FFCE56' } ];
A2: 你可以通过修改#chart
元素的宽度和高度样式属性来改变饼图的大小,将宽度和高度都设置为 600px:
#chart { width: 600px; height: 600px; }
需要相应地调整路径数据中的半径值,从原来的50
改为300
(即半径为宽度或高度的一半)。