|
2 | 2 | 菜单集合 |
3 | 3 | */ |
4 | 4 | import { objForEach } from '../util/util.js' |
5 | | - |
6 | | -// 存储菜单的构造函数 |
7 | | -const MenuConstructors = {} |
8 | | - |
9 | | -// 引入所有的菜单,并记录 |
10 | | -import Bold from './bold.js' |
11 | | -MenuConstructors.bold = Bold |
12 | | - |
13 | | -import Head from './head.js' |
14 | | -MenuConstructors.head = Head |
15 | | - |
16 | | -import Link from './link.js' |
17 | | -MenuConstructors.link = Link |
18 | | - |
| 5 | +import MenuConstructors from './menu-list.js' |
19 | 6 |
|
20 | 7 | // 构造函数 |
21 | 8 | function Menus(editor) { |
@@ -64,12 +51,57 @@ Menus.prototype = { |
64 | 51 |
|
65 | 52 | // 绑定菜单 click mouseenter 事件 |
66 | 53 | _bindEvent: function () { |
| 54 | + const menus = this.menus |
| 55 | + objForEach(menus, (key, menu) => { |
| 56 | + const type = menu.type |
| 57 | + if (!type) { |
| 58 | + return |
| 59 | + } |
| 60 | + const $elem = menu.$elem |
| 61 | + const droplist = menu.droplist |
| 62 | + const panel = menu.panel |
| 63 | + |
| 64 | + // 点击类型,例如 bold |
| 65 | + if (type === 'click' && menu.onClick) { |
| 66 | + $elem.on('click', e => { |
| 67 | + menu.onClick(e) |
| 68 | + }) |
| 69 | + } |
67 | 70 |
|
| 71 | + // 下拉框,例如 head |
| 72 | + if (type === 'droplist' && droplist) { |
| 73 | + $elem.on('mouseenter', e => { |
| 74 | + // 显示 |
| 75 | + if (droplist.hideTimeoutId) { |
| 76 | + // 清除之前的定时隐藏 |
| 77 | + clearTimeout(droplist.hideTimeoutId) |
| 78 | + } |
| 79 | + droplist.show() |
| 80 | + }).on('mouseleave', e => { |
| 81 | + // 定时隐藏 |
| 82 | + droplist.hideTimeoutId = setTimeout(() => { |
| 83 | + droplist.hide() |
| 84 | + }, 500) |
| 85 | + }) |
| 86 | + } |
| 87 | + |
| 88 | + // 弹框类型,例如 link |
| 89 | + if (type === 'panel' && panel) { |
| 90 | + $elem.on('click', e => { |
| 91 | + panel.show() |
| 92 | + }) |
| 93 | + } |
| 94 | + }) |
68 | 95 | }, |
69 | 96 |
|
70 | 97 | // 尝试修改菜单状态 |
71 | 98 | changeActive: function () { |
72 | | - |
| 99 | + const menus = this.menus |
| 100 | + objForEach(menus, (key, menu) => { |
| 101 | + if (menu.tryChangeActive) { |
| 102 | + menu.tryChangeActive() |
| 103 | + } |
| 104 | + }) |
73 | 105 | } |
74 | 106 | } |
75 | 107 |
|
|
0 commit comments