UNPKG

vislite

Version:

灵活、快速、简单的数据可视化交互式跨端前端库

132 lines (105 loc) 2.53 kB
# PieLayout 饼图布局 PieLayout 用于绘制饼图/环形图,支持交互和动画。 ## 引入 ```js import { PieLayout } from 'vislite'; ``` ## 初始化 ```js var pieLayout = new PieLayout(config); ``` ### config 配置 ```js { // 获取名称 name: function(pieData, initPie) { return pieData.name; }, // 获取值 value: function(pieData, initPie) { return pieData.value; } } ``` ## setOption 设置布局行为 ```js pieLayout.setOption({ cx: 200, // 圆心x坐标 cy: 200, // 圆心y坐标 radius: [50, 100], // 半径:[内半径, 外半径] duration: 200 // 动画时长(ms) }); ``` ## use 坐标计算 ```js var pie = pieLayout.use(initPie, hoverIndex); ``` ### 返回值 pie 结构 ```js { count: 数据项数量, cx: 圆心x, cy: 圆心y, radius: [内半径, 外半径], hoverIndex: 当前悬浮项索引, node: [ { value: 数值, name: 名称, beginDeg: 开始弧度, deg: 跨越弧度, isHover: 是否悬浮, radius: [当前内半径, 当前外半径], label: { line: [[x1,y1], [x2,y2], [x3,y3]], // 标签线 position: [x, y], // 标签位置 align: 'left' | 'right' // 对齐方式 } } ] } ``` ## bind 绑定渲染 ```js pieLayout.bind(initPie, function(pie) { // 绘制饼图 for (var i = 0; i < pie.count; i++) { var node = pie.node[i]; // 绘制扇形... } }); ``` ## 交互方法 ```js // 设置悬浮项 pieLayout.setHover(index); // 更新布局 pieLayout.doUpdate(); // 解绑 pieLayout.unbind(); ``` ## 使用示例 ```js var pieLayout = new PieLayout(); pieLayout.setOption({ cx: 200, cy: 200, radius: [30, 100], duration: 300 }); var data = [ { name: 'HTML', value: 30 }, { name: 'CSS', value: 20 }, { name: 'JavaScript', value: 50 } ]; var pie = pieLayout.use(data); // 绘制饼图 for (var i = 0; i < pie.count; i++) { var node = pie.node[i]; var colors = ['red', 'green', 'blue']; painter.config({ fillStyle: colors[i] }).fillArc(pie.cx, pie.cy, node.radius[0], node.radius[1], node.beginDeg, node.deg); } ```