DropList 菜单

DropList 菜单,鼠标 hover 菜单时,显示下拉列表,如下图。

DropList菜单 - 图1

开发一个 DropList 菜单的 class 代码如下。另,注册菜单,和上文过程一样,不再赘述。

  1. // 标题菜单的 class ,可作为 DropList 菜单的参考代码
  2. class Head extends DropListMenu {
  3. constructor(editor) {
  4. // 菜单栏中,标题菜单的 DOM 元素
  5. // 注意,这里的 $ 不是 jQuery ,是 E.$ (wangEditor 自带的 DOM 操作工具,类似于 jQuery)
  6. // data-title属性表示当鼠标悬停在该按钮上时提示该按钮的功能简述
  7. const $elem = $('<div class="w-e-menu" data-title="标题"><i class="w-e-icon-header"></i></div>')
  8. // droplist 配置
  9. const dropListConf = {
  10. width: 100,
  11. title: '设置标题',
  12. type: 'list',
  13. list: [
  14. { $elem: $('<h1>H1</h1>'), value: '<h1>' },
  15. { $elem: $('<h2>H2</h2>'), value: '<h2>' },
  16. { $elem: $('<h3>H3</h3>'), value: '<h3>' },
  17. { $elem: $('<h4>H4</h4>'), value: '<h4>' },
  18. { $elem: $('<h5>H5</h5>'), value: '<h5>' },
  19. { $elem: $('<p>正文</p>'), value: '<p>' },
  20. ],
  21. // droplist 每个 item 的点击事件
  22. clickHandler: (value) => {
  23. // value 参数即 dropListConf.list 中配置的 value
  24. this.command(value)
  25. },
  26. }
  27. super($elem, editor, dropListConf)
  28. }
  29. command(value) {
  30. // 设置标题
  31. this.editor.cmd.do('formatBlock', value)
  32. }
  33. // 菜单是否需要激活
  34. tryChangeActive() {
  35. const reg = /^h/i
  36. const cmdValue = this.editor.cmd.queryCommandValue('formatBlock')
  37. if (reg.test(cmdValue)) {
  38. // 选区处于标题内,激活菜单
  39. this.active()
  40. } else {
  41. // 否则,取消激活
  42. this.unActive()
  43. }
  44. }
  45. }