logo

G6

  • 文档
  • API
  • 图表示例
  • 社区
  • 所有产品antv logo arrow
  • 5.0.49
  • 简介
  • 开始使用
    • 快速开始
    • 安装
    • 前端框架集成
      • 在 React 中使用
      • 在 Vue 中使用
      • 在 Angular 中使用
    • 详细教程
  • 图 Graph
    • Graph - 图
    • Options 配置项
    • 内置扩展
    • Extension - 扩展
  • 数据 Data
  • 元素 Element
    • 元素总览
    • 元素状态
    • 节点 Node
      • 节点总览
      • 节点通用配置项
      • 圆形节点 Circle
      • 菱形节点 Diamond
      • 甜甜圈节点 Donut
      • 椭圆形节点 Ellipse
      • 六边形节点 Hexagon
      • HTML节点 Html
      • 图片节点 Image
      • 矩形节点 Rect
      • 五角形节点 Star
      • 三角形节点 Triangle
      • 自定义节点
      • 使用 React 定义节点
    • 边 Edge
      • 边总览
      • 边通用配置项
      • 三次贝塞尔曲线边 Cubic
      • 水平三次贝塞尔曲线边 CubicHorizontal
      • 垂直三次贝塞尔曲线边 CubicVertical
      • 直线边 Line
      • 二次贝塞尔曲线边 Quadratic
      • 折线边 Polyline
      • 自定义边
    • 组合 Combo
      • 组合总览
      • 组合通用配置项
      • 圆形组合 Circle
      • 矩形组合 Rect
      • 自定义 Combo
    • 图形 Shape
      • 图形 Shape 与 KeyShape
      • 原子 Shape 以及其属性
      • 复合 Shape 的设计与实现
  • 布局 Layout
    • 布局总览
    • 布局通用配置项
    • AntV Dagre 布局 AntvDagre
    • 环形布局 Circular
    • 复合布局 ComboCombined
    • 紧凑树布局 CompactBox
    • 同心圆布局 Concentric
    • 3D D3力导向布局 D3Force3D
    • D3力导向布局 D3Force
    • Dagre 布局
    • 生态树 Dendrogram
    • 鱼骨布局 Fishbone
    • ForceAtlas2 力导向布局
    • Force 力导向布局
    • Fruchterman 力导向布局
    • 网格布局 Grid
    • 缩进树 Indented
    • 高维数据降维布局 MDS
    • 脑图树 Mindmap
    • 径向布局 Radial
    • 随机布局 Random
    • 蛇形布局 Snake
    • 自定义布局
  • 交互 Behavior
    • 交互总览
    • 缩放画布 ZoomCanvas
    • 标签自适应显示 AutoAdaptLabel
    • 框选 BrushSelect
    • 点击选中 ClickSelect
    • 展开/收起元素 CollapseExpand
    • 创建边 CreateEdge
    • 拖拽画布 DragCanvas
    • 拖拽元素 DragElement
    • 力导向拖拽元素 DragElementForce
    • 缩放画布时固定元素大小 FixElementSize
    • 聚焦元素 FocusElement
    • 悬停激活 HoverActivate
    • 套索选择 LassoSelect
    • 优化视口变换 OptimizeViewportTransform
    • 滚动画布 ScrollCanvas
    • 自定义交互
  • 插件 Plugin
    • 插件总览
    • 背景 Background
    • 气泡集 BubbleSets
    • 上下文菜单 Contextmenu
    • 边绑定 EdgeBundling
    • 边过滤镜 EdgeFilterLens
    • 鱼眼放大镜 Fisheye
    • 全屏展示 Fullscreen
    • 网格线 GridLine
    • 历史记录 History
    • 轮廓包围 Hull
    • 图例 Legend
    • 小地图 Minimap
    • 对齐线 Snapline
    • 时间条 Timebar
    • 工具栏 Toolbar
    • 提示框 Tooltip
    • 水印 Watermark
    • 自定义插件
  • 数据处理 Transform
    • 数据处理总览
    • 动态调整节点大小 MapNodeSize
    • 径向标签 PlaceRadialLabels
    • 平行边 ProcessParallelEdges
    • 自定义数据处理
  • 主题 Theme
    • 主题总览
    • 自定义主题
    • 色板
    • 自定义色板
  • 动画 Animation
    • 动画总览
    • 自定义动画
  • 扩展阅读
    • 事件
    • 渲染器
    • 坐标系
    • 下载图片
    • 使用 iconfont
    • 使用 3D
    • 项目打包
  • 版本特性
    • 新版本特性
    • 升级到 5.0
  • 常见问题
  • 参与贡献

元素状态

上一篇
元素总览
下一篇
节点总览

资源

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

什么是元素状态

元素状态(State)是指图中元素(节点、边、组合)在不同交互场景下的视觉表现形式。比如当用户点击一个节点时,节点可能会变成"选中"状态并改变颜色;当鼠标悬停在边上时,边可能会进入"高亮"状态并加粗显示。

简单来说,状态让元素能够根据用户的操作或业务逻辑动态改变外观。

状态的特点

  • 多状态共存:一个元素可以同时拥有多个状态,比如既是"选中"又是"高亮"
  • 样式叠加:多个状态的样式会叠加在一起,后设置的状态样式优先级更高
  • 完全自定义:除了内置状态,您可以创建任何符合业务需求的自定义状态

内置状态类型

G6 提供了一些常用的内置状态,您可以直接使用:

状态名说明典型使用场景
selected选中状态用户点击选择元素时
active激活状态当前正在交互的元素
highlight高亮状态需要强调显示的元素
inactive非活跃状态淡化显示非关注元素
disable禁用状态不可交互的元素

💡 提示:这些内置状态并非必须使用,您完全可以根据业务需求定义自己的状态名称。

配置状态样式

基础配置

在创建图实例时,为不同状态配置相应的样式:

const graph = new Graph({
// 节点的状态样式配置
node: {
// 默认样式(无状态时的样式)
style: {
fill: '#C6E5FF',
stroke: '#5B8FF9',
lineWidth: 1,
},
// 各种状态下的样式
state: {
selected: {
fill: '#95D6FB',
stroke: '#1890FF',
lineWidth: 2,
shadowColor: '#1890FF',
shadowBlur: 10,
},
highlight: {
stroke: '#FF6A00',
lineWidth: 2,
},
disable: {
fill: '#ECECEC',
stroke: '#BFBFBF',
opacity: 0.5,
},
},
},
// 边的状态样式配置
edge: {
style: {
stroke: '#E2E2E2',
lineWidth: 1,
},
state: {
selected: {
stroke: '#1890FF',
lineWidth: 2,
},
highlight: {
stroke: '#FF6A00',
lineWidth: 3,
},
},
},
// 组合的状态样式配置
combo: {
style: {
fill: '#F0F0F0',
stroke: '#D9D9D9',
},
state: {
selected: {
stroke: '#1890FF',
lineWidth: 2,
},
},
},
});

自定义状态

您可以创建任何符合业务需求的自定义状态:

const graph = new Graph({
node: {
style: {
fill: '#C6E5FF',
stroke: '#5B8FF9',
},
state: {
// 自定义状态:错误
error: {
fill: '#FFEBE6',
stroke: '#FF4D4F',
lineWidth: 2,
lineDash: [4, 4], // 虚线边框
},
// 自定义状态:成功
success: {
fill: '#F6FFED',
stroke: '#52C41A',
lineWidth: 2,
},
// 自定义状态:警告
warning: {
fill: '#FFFBE6',
stroke: '#FAAD14',
lineWidth: 2,
// 添加图标
icon: {
show: true,
text: '⚠️',
fontSize: 16,
},
},
},
},
});

设置元素状态

数据中设置初始状态

在数据中为元素设置初始状态:

const data = {
nodes: [
{
id: 'node1',
states: ['selected'], // 初始为选中状态
},
{
id: 'node2',
states: ['disabled'], // 初始为禁用状态
},
{
id: 'node3',
states: ['highlight', 'active'], // 初始有多个状态
},
],
edges: [
{
source: 'node1',
target: 'node2',
states: ['highlight'], // 边的初始状态
},
],
};
graph.setData(data);

动态设置状态

通过 API 动态改变元素状态:

// 设置单个元素的单个状态
graph.setElementState('node1', 'selected');
// 设置单个元素的多个状态
graph.setElementState('node2', ['highlight', 'active']);
// 批量设置多个元素的状态
graph.setElementState({
node1: ['selected'],
node2: ['highlight'],
edge1: ['active'],
});

状态的叠加效果

当元素有多个状态时,样式会按顺序叠加:

// 假设节点同时有 selected 和 highlight 状态
graph.setElementState('node1', ['selected', 'highlight']);
// 最终样式 = 默认样式 + selected状态样式 + highlight状态样式
// 如果有样式冲突,后面的状态样式会覆盖前面的

清除元素状态

清除所有状态

将元素恢复到默认状态(无任何状态):

// 清除单个元素的所有状态
graph.setElementState('node1', []);
// 批量清除多个元素的状态
graph.setElementState({
node1: [],
node2: [],
edge1: [],
});

清除特定状态

如果元素有多个状态,您可以只清除其中的某些状态:

// 假设 node1 当前有 ['selected', 'highlight', 'active'] 三个状态
// 现在只想保留 'selected' 状态,清除其他状态
graph.setElementState('node1', ['selected']);
// 或者获取当前状态,然后过滤掉不需要的状态
const currentStates = graph.getElementState('node1');
const newStates = currentStates.filter((state) => state !== 'highlight');
graph.setElementState('node1', newStates);

清除所有元素的特定状态

// 清除所有节点的 'highlight' 状态
const allNodes = graph.getNodeData();
const stateUpdates = {};
allNodes.forEach((node) => {
const currentStates = graph.getElementState(node.id);
const newStates = currentStates.filter((state) => state !== 'highlight');
stateUpdates[node.id] = newStates;
});
graph.setElementState(stateUpdates);

查询元素状态

获取元素状态

// 获取指定元素的所有状态
const states = graph.getElementState('node1');
console.log(states); // 例如:['selected', 'highlight']
// 如果元素没有任何状态,返回空数组
console.log(states); // []

查找特定状态的元素

// 获取所有处于 'selected' 状态的节点数据
const selectedNodes = graph.getElementDataByState('node', 'selected');
// 获取所有处于 'highlight' 状态的边数据
const highlightEdges = graph.getElementDataByState('edge', 'highlight');

判断元素是否处于某状态

// 检查元素是否处于特定状态
const states = graph.getElementState('node1');
const isSelected = states.includes('selected');
const isHighlight = states.includes('highlight');
console.log('节点是否选中:', isSelected);
console.log('节点是否高亮:', isHighlight);