# Event 模块 API 文档 以下内容由 `DeepSeek R1` 模型生成并微调。 --- ## 枚举说明 ### MouseType | 值 | 说明 | | --------- | ---------------- | | `None` | 没有按键按下 | | `Left` | 左键 | | `Middle` | 中键(按下滚轮) | | `Right` | 右键 | | `Back` | 侧键后退 | | `Forward` | 侧键前进 | ### WheelType | 值 | 说明 | | ------- | -------------------------- | | `None` | 无单位 | | `Pixel` | 以像素为单位 | | `Line` | 以行为单位(约 1rem) | | `Page` | 以页为单位(一个屏幕高度) | ### ActionType | 值 | 说明 | | ------- | -------------------------------- | | `Click` | 点击事件(按下与抬起在同一元素) | | `Down` | 鼠标或手指按下事件 | | `Move` | 鼠标或手指移动事件 | | `Up` | 鼠标或手指抬起事件 | | `Enter` | 进入元素时触发 | | `Leave` | 离开元素时触发 | | `Wheel` | 滚轮事件 | ### EventProgress | 值 | 说明 | | --------- | -------- | | `Capture` | 捕获阶段 | | `Bubble` | 冒泡阶段 | --- ## 接口说明 ### IActionEventBase | 属性名 | 类型 | 说明 | | ---------- | ------------ | ----------------------------------------------------------------- | | `target` | `RenderItem` | 触发事件的元素 | | `touch` | `boolean` | 是否为触摸操作(`true` 表示触摸,`false` 表示鼠标) | | `type` | `MouseType` | 触发事件的按键类型(参考 `MouseType`) | | `buttons` | `number` | 当前按下的按键(通过位运算判断,例如 `buttons & MouseType.Left`) | | `altKey` | `boolean` | 是否按下 `Alt` 键 | | `shiftKey` | `boolean` | 是否按下 `Shift` 键 | | `ctrlKey` | `boolean` | 是否按下 `Ctrl` 键 | | `metaKey` | `boolean` | 是否按下 `Windows/Command` 键 | --- ### IActionEvent #### 继承关系 ```mermaid graph LR IActionEvent --> IActionEventBase ``` | 属性名 | 类型 | 说明 | | ------------ | -------- | -------------------------------------------- | | `identifier` | `number` | 操作的唯一标识符(在按下、移动、抬起中一致) | | `offsetX` | `number` | 相对于元素左上角的横坐标 | | `offsetY` | `number` | 相对于元素左上角的纵坐标 | | `absoluteX` | `number` | 相对于整个画布左上角的横坐标 | | `absoluteY` | `number` | 相对于整个画布左上角的纵坐标 | #### 方法说明 ##### `stopPropagation` ```typescript function stopPropagation(): void; ``` **描述** 停止事件的传播(捕获或冒泡阶段)。 **示例** ```typescript item.on('click', ev => { ev.stopPropagation(); // 阻止事件继续传播 }); ``` --- ### IWheelEvent ```mermaid graph LR IWheelEvent --> IActionEvent --> IActionEventBase ``` | 属性名 | 类型 | 说明 | | ----------- | ----------- | -------------------- | | `wheelX` | `number` | 横向滚动量 | | `wheelY` | `number` | 纵向滚动量 | | `wheelZ` | `number` | 垂直屏幕方向的滚动量 | | `wheelType` | `WheelType` | 滚动量的单位类型 | --- ### ERenderItemActionEvent 描述了所有的交互事件类型。 | 事件名 | 参数类型 | 说明 | | -------------- | ---------------------------- | ------------------ | | `clickCapture` | `Readonly` | 点击事件的捕获阶段 | | `click` | `Readonly` | 点击事件的冒泡阶段 | | `downCapture` | `Readonly` | 按下事件的捕获阶段 | | `down` | `Readonly` | 按下事件的冒泡阶段 | | `moveCapture` | `Readonly` | 移动事件的捕获阶段 | | `move` | `Readonly` | 移动事件的冒泡阶段 | | `upCapture` | `Readonly` | 抬起事件的捕获阶段 | | `up` | `Readonly` | 抬起事件的冒泡阶段 | | `enter` | `Readonly` | 进入元素事件 | | `leave` | `Readonly` | 离开元素事件 | | `wheelCapture` | `Readonly` | 滚轮事件的捕获阶段 | | `wheel` | `Readonly` | 滚轮事件的冒泡阶段 | --- ### ActionEventMap | 键(ActionType) | 值类型 | 说明 | | ---------------- | -------------- | ------------ | | `Click` | `IActionEvent` | 点击事件 | | `Down` | `IActionEvent` | 按下事件 | | `Enter` | `IActionEvent` | 进入元素事件 | | `Leave` | `IActionEvent` | 离开元素事件 | | `Move` | `IActionEvent` | 移动事件 | | `Up` | `IActionEvent` | 抬起事件 | | `Wheel` | `IWheelEvent` | 滚轮事件 | --- ## 总使用示例 ::: code-group ```typescript // 创建渲染元素(以 Sprite 为例) const item = new Sprite(); // 监听点击事件(冒泡阶段) item.on('click', ev => { console.log('点击坐标:', ev.offsetX, ev.offsetY); ev.stopPropagation(); // 阻止冒泡 }); // 监听滚轮事件(捕获阶段) item.on('wheelCapture', ev => { console.log('滚轮滚动量:', ev.wheelY, '单位:', WheelType[ev.wheelType]); }); // 监听进入元素事件 item.on('enter', ev => { console.log('进入元素,触发按键:', MouseType[ev.type]); }); ``` ```tsx // 监听点击事件(冒泡阶段) const click = (ev: IActionEvent) => { console.log('点击坐标:', ev.offsetX, ev.offsetY); ev.stopPropagation(); // 阻止冒泡 }; // 监听滚轮事件(捕获阶段) const wheel = (ev: IWheelEvent) => { console.log('滚轮滚动量:', ev.wheelY, '单位:', WheelType[ev.wheelType]); }; // 监听进入元素事件 const enter = (ev: IActionEventBase) => { console.log('进入元素,触发按键:', MouseType[ev.type]); }; ; ``` :::