parent
2d16866892
commit
0bacc113cd
@ -0,0 +1,101 @@
|
|||||||
|
# 事件监听(eventBus)
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import Editor from "@hufe921/canvas-editor"
|
||||||
|
|
||||||
|
const instance = new Editor(container, <IElement[]>data, options)
|
||||||
|
|
||||||
|
// 注册
|
||||||
|
instance.eventBus.on<K keyof EventMap>(
|
||||||
|
eventName: K,
|
||||||
|
callback: EventMap[K]
|
||||||
|
)
|
||||||
|
|
||||||
|
// 移除
|
||||||
|
instance.eventBus.off<K keyof EventMap>(
|
||||||
|
eventName: K,
|
||||||
|
callback: EventMap[K]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## rangeStyleChange
|
||||||
|
功能:选区样式发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('rangeStyleChange', (payload: IRangeStyle) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## visiblePageNoListChange
|
||||||
|
功能:可见页发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('visiblePageNoListChange', (payload: number[]) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## intersectionPageNoChange
|
||||||
|
功能:当前页发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('intersectionPageNoChange', (payload: number) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## pageSizeChange
|
||||||
|
功能:当前页数发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('pageSizeChange', (payload: number) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## pageScaleChange
|
||||||
|
功能:当前页面缩放比例发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('pageScaleChange', (payload: number) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## contentChange
|
||||||
|
功能:当前内容发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('contentChange', () => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## controlChange
|
||||||
|
功能:当前光标所在控件发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('controlChange', (payload: IControl | null) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## pageModeChange
|
||||||
|
功能:页面模式发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('pageModeChange', (payload: PageMode) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## saved
|
||||||
|
功能:文档执行保存
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('saved', (payload: IEditorResult) => void)
|
||||||
|
```
|
||||||
|
|
||||||
|
## zoneChange
|
||||||
|
功能:区域发生改变
|
||||||
|
|
||||||
|
用法:
|
||||||
|
```javascript
|
||||||
|
instance.eventBus.on('zoneChange', (payload: EditorZone) => void)
|
||||||
|
```
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
export class EventBus<EventMap> {
|
||||||
|
private eventHub: Map<string, Set<Function>>
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.eventHub = new Map()
|
||||||
|
}
|
||||||
|
|
||||||
|
public on<K extends string & keyof EventMap>(
|
||||||
|
eventName: K,
|
||||||
|
callback: EventMap[K]
|
||||||
|
) {
|
||||||
|
if (!eventName || typeof callback !== 'function') return
|
||||||
|
const eventSet = this.eventHub.get(eventName) || new Set()
|
||||||
|
eventSet.add(callback)
|
||||||
|
this.eventHub.set(eventName, eventSet)
|
||||||
|
}
|
||||||
|
|
||||||
|
public emit<K extends string & keyof EventMap>(
|
||||||
|
eventName: K,
|
||||||
|
payload?: EventMap[K] extends (payload: infer P) => void ? P : never
|
||||||
|
) {
|
||||||
|
if (!eventName) return
|
||||||
|
const callBackSet = this.eventHub.get(eventName)
|
||||||
|
if (!callBackSet) return
|
||||||
|
if (callBackSet.size === 1) {
|
||||||
|
const callBack = [...callBackSet]
|
||||||
|
return callBack[0](payload)
|
||||||
|
}
|
||||||
|
callBackSet.forEach(callBack => callBack(payload))
|
||||||
|
}
|
||||||
|
|
||||||
|
public off<K extends string & keyof EventMap>(
|
||||||
|
eventName: K,
|
||||||
|
callback: EventMap[K]
|
||||||
|
) {
|
||||||
|
if (!eventName || typeof callback !== 'function') return
|
||||||
|
const callBackSet = this.eventHub.get(eventName)
|
||||||
|
if (!callBackSet) return
|
||||||
|
callBackSet.delete(callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
public isSubscribe<K extends string & keyof EventMap>(eventName: K): boolean {
|
||||||
|
const eventSet = this.eventHub.get(eventName)
|
||||||
|
return !!eventSet && eventSet.size > 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import {
|
||||||
|
IContentChange,
|
||||||
|
IControlChange,
|
||||||
|
IIntersectionPageNoChange,
|
||||||
|
IPageModeChange,
|
||||||
|
IPageScaleChange,
|
||||||
|
IPageSizeChange,
|
||||||
|
IRangeStyleChange,
|
||||||
|
ISaved,
|
||||||
|
IVisiblePageNoListChange,
|
||||||
|
IZoneChange
|
||||||
|
} from './Listener'
|
||||||
|
|
||||||
|
export interface EventBusMap {
|
||||||
|
rangeStyleChange: IRangeStyleChange
|
||||||
|
visiblePageNoListChange: IVisiblePageNoListChange
|
||||||
|
intersectionPageNoChange: IIntersectionPageNoChange
|
||||||
|
pageSizeChange: IPageSizeChange
|
||||||
|
pageScaleChange: IPageScaleChange
|
||||||
|
saved: ISaved
|
||||||
|
contentChange: IContentChange
|
||||||
|
controlChange: IControlChange
|
||||||
|
pageModeChange: IPageModeChange
|
||||||
|
zoneChange: IZoneChange
|
||||||
|
}
|
||||||
Loading…
Reference in new issue