---
title: "事件"
description: "事件"
language: "zh"
canonical: "https://g6.antv.antgroup.com/zh/manual/further-reading/event/"
version: "5.1.1"
---

## 概述

G6 中的事件系统是在 [G](https://g.antv.antgroup.com/api/event/intro) 的事件系统基础上进行了封装，提供了更多的事件类型，以及更加方便的事件绑定和解绑方法。

## 事件类型

G6 中的事件类型主要分为以下几类：

1. 图(Graph)事件
2. 画布(Canvas)事件
3. 元素(Element)事件

### 图事件

图事件是指与整个图实例相关的事件，例如图的渲染完成事件、图的更新事件等。图事件的完整列表见[GraphEvent](/zh/api/event/#图表生命周期事件-graphevent)。

#### 监听图事件

图事件的监听与默认的事件监听方式一致，例如监听图的渲染完成事件：

```typescript
import { Graph, GraphEvent } from '@antv/g6';

const graph = new Graph({
  // ...
});

graph.on(GraphEvent.AFTER_RENDER, () => {
  // event handler
});
```

### 画布事件

画布事件是指与画布相关的事件，例如画布的点击事件、画布的拖拽事件等。画布事件的完整列表见[CanvasEvent](/zh/api/event/#画布事件-canvasevent)。

#### 监听画布事件

例如监听画布的点击事件：

```typescript
import { Graph, CanvasEvent } from '@antv/g6';

const graph = new Graph({
  // ...
});

graph.on(CanvasEvent.CLICK, (event) => {
  // event handler
});
```

### 元素事件

元素事件主要指在元素对象上触发的事件，例如节点的拖拽事件、边的点击事件等。元素分为节点(`node`)、边(`edge`)、组合(`combo`)三类，对应的事件完整列表分别见：[NodeEvent](/zh/api/event/#节点事件-nodeevent) 、[EdgeEvent](/zh/api/event/#边事件-edgeevent)、[ComboEvent](/zh/api/event/#combo事件-comboevent)。

#### 监听元素事件

与画布事件类似，例如监听节点的拖拽和边的点击事件：

```ts
import { Graph, NodeEvent, EdgeEvent, ComboEvent } from '@antv/g6';

const graph = new Graph({
  // ...
});

graph.on(NodeEvent.DRAG, (event) => {
  // event handler
});

graph.on(EdgeEvent.CLICK, (event) => {
  // event handler
});

graph.on(ComboEvent.CLICK, (event) => {
  // event handler
});
```

## 事件监听与解除

G6 提供以下 API 用于事件监听和解除：

### on

添加事件监听

```typescript
const handler = (event) => {
  // event handler
};

graph.on('event_name', handler);
```

### off

移除事件监听

```typescript
graph.off('event_name', handler);
```

当不传入任何参数时，会移除所有事件监听：

```typescript
graph.off();
```

### once

添加一次性事件监听，即事件触发后会自动移除事件监听

```typescript
graph.once('event_name', handler);
```

### emit

如果你想手动触发一个事件，可以使用 `emit` 方法：

```typescript
graph.emit('event_name', {
  // event data
});
```
