0.0.24 • Published 1 year ago
@aoviz/graphs v0.0.24
@aoviz/graphs
简洁,轻量,可配置的图渲染组件
快速上手
import { Force } from '@aoviz/graphs';
以 React 使用为例:
function Viz() {
const wrapper = useRef<HTMLDivElement>(null);
useEffect(() => {
const instance = new Force(wrapper.current!);
instance.data(data);
}, [wrapper]);
return <div ref={wrapper} style={{ height: 500 }}></div>;
}
传入的渲染数据类型:
interface IData {
nodes: INode[];
links: ILink[];
}
interface INode {
id: string;
name: string;
}
interface ILink {
id: string;
source: string;
target: string;
name: string;
cfg?: ILinkCfg;
}
interface INodeCfg {
radius: number;
label: ILabel;
backgroundColor: string;
}
interface ILinkCfg {
label: Omit<ILabel, 'borderRadius'>;
curveOffset: number;
shape: 'line' | 'arc' | 'self';
stroke: string;
}
图组件配置数据类型:
interface IOption {
node?: INodeCfg;
link?: ILinkCfg;
layout: Partial<ILayoutForceOption>;
}
interface ILayoutForceOption {
chargeStrength: number; // 电荷力强度,为正模拟重力(吸引力),为负模拟排斥力
collideStrength: number; // 节点间碰撞强度,范围 [0,1]
width: number; // 画布宽度,默认父元素宽度
height: number; // 画布高度,默认传入父元素高度
linkDistance: number; // 关系的间距
}
图组件默认配置:
const DEFAULT_FONT_STYLE = {
fontSize: 12,
fontWeight: 'normal',
fontFamily: 'sans-serif',
};
export const DEFAULT_OPTION: IOption = {
node: {
label: {
width: 120,
color: 'rgba(255,255,255,1)',
...DEFAULT_FONT_STYLE,
backgroundColor: 'rgba(0,0,0,.65)',
borderRadius: 12,
},
backgroundColor: '#6EA3FD',
radius: 28,
},
link: {
label: {
width: 150,
color: 'rgba(0,0,0,.65)',
...DEFAULT_FONT_STYLE,
backgroundColor: '#fff',
},
stroke: '#9c9b9b',
shape: 'line',
curveOffset: 22,
},
layout: {
chargeStrength: -1600,
collideStrength: 0.5,
linkDistance: 300,
},
};
ForceInstance
名称 | 说明 | 类型 |
---|---|---|
data() | 设置渲染的数据,调用该方法后自动执行布局重绘操作 | IForceData |
getZoom() | 获取当前缩放比例 | number |
setZoom() | 设置缩放比例 | number |
onNodeClick$ | 获取节点的 Click 事件 | Observable<IRenderNode> |
onNodeHover$ | 获取节点的 Hover 事件 | Observable<IRenderNode \| null> |
onLinkClick$ | 获取关系的 Click 事件 | Observable<IRenderLink> |
onLinkHover$ | 获取关系的 Hover 事件 | Observable<IRenderLink \| null> |
onNodeDrag$ | 获取节点的 Click 事件 | Observable<INodeDragEvent> |
事件的监听使用了 Rxjs 。了解更多可以前往 官方文档
拖拽事件暴露的类型如下所示:
interface INodeDragEvent {
data: IRenderNode;
type: 'dragstart' | 'dragging' | 'dragend';
}
在线体验
Roadmap
- 图布局和渲染
- 添加事件支持
- 支持主题和更多的样式配置
- 支持插件形式,可以自定义控制渲染内容实现
- 待定...
Good Idea
如果你有好的想法欢迎提 Issues
与我联系
0.0.20
1 year ago
0.0.21
1 year ago
0.0.22
1 year ago
0.0.23
1 year ago
0.0.24
1 year ago
0.0.10
1 year ago
0.0.11
1 year ago
0.0.12
1 year ago
0.0.13
1 year ago
0.0.14
1 year ago
0.0.15
1 year ago
0.0.16
1 year ago
0.0.17
1 year ago
0.0.18
1 year ago
0.0.19
1 year ago
0.0.9
2 years ago
0.0.8
2 years ago
0.0.7
2 years ago
0.0.6
2 years ago
0.0.5
2 years ago
0.0.4
2 years ago
0.0.3
2 years ago
0.0.2
2 years ago
0.0.1
2 years ago