bus.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. export default {
  2. eventMap: new Map<string, Array<(val?: unknown) => void>>(),
  3. on(eventType: string, cb: (val?: unknown) => void) {
  4. const cbs = this.eventMap.get(eventType)
  5. if (cbs) {
  6. cbs.push(cb)
  7. } else {
  8. this.eventMap.set(eventType, [cb])
  9. }
  10. },
  11. once(eventType: string, cb: (val?: unknown) => void) {
  12. this.eventMap.set(eventType, [cb])
  13. },
  14. off(eventType: string, fn?: (val?: unknown) => void) {
  15. if (!this.eventMap.has(eventType)) return
  16. if (fn) {
  17. const cbs = this.eventMap.get(eventType)!
  18. const rIndex = cbs.findIndex((v) => v === fn)
  19. if (rIndex > -1) cbs.splice(rIndex, 1)
  20. this.eventMap.set(eventType, cbs)
  21. } else {
  22. this.eventMap.delete(eventType)
  23. }
  24. },
  25. offAll() {
  26. this.eventMap = new Map()
  27. },
  28. emit(eventType: string, val?: unknown) {
  29. const cbs = this.eventMap.get(eventType)
  30. if (cbs) cbs.forEach((cb) => cb(val))
  31. },
  32. }
  33. export const EVENT_KEY = {
  34. ENTER_FULLSCREEN: 'ENTER_FULLSCREEN',
  35. EXIT_FULLSCREEN: 'EXIT_FULLSCREEN',
  36. OPEN_COMMENTS: 'OPEN_COMMENTS',
  37. CLOSE_COMMENTS: 'CLOSE_COMMENTS',
  38. SHOW_SHARE: 'SHOW_SHARE',
  39. NAV: 'NAV',
  40. GO_USERINFO: 'GO_USERINFO',
  41. CURRENT_ITEM: 'CURRENT_ITEM',
  42. TOGGLE_CURRENT_VIDEO: 'TOGGLE_CURRENT_VIDEO',
  43. SINGLE_CLICK: 'SINGLE_CLICK',
  44. SINGLE_CLICK_BROADCAST: 'SINGLE_CLICK_BROADCAST',
  45. ITEM_TOGGLE: 'ITEM_TOGGLE',
  46. ITEM_PLAY: 'ITEM_PLAY',
  47. ITEM_STOP: 'ITEM_STOP',
  48. UPDATE_ITEM: 'UPDATE_ITEM',
  49. REMOVE_MUTED: 'REMOVE_MUTED',
  50. DIALOG_MOVE: 'DIALOG_MOVE',
  51. DIALOG_END: 'DIALOG_END',
  52. }