Commit a4b13f8df155351a32b355de487e654d40f1a459

Authored by ly525
1 parent a7875cbc

feat: add the right-click menu, step1: just show menu

front-end/h5/src/components/core/editor/canvas/edit.js
... ... @@ -3,7 +3,8 @@ export default {
3 3 props: ['elements', 'editingElement', 'handleClickElementProp', 'handleClickCanvasProp'],
4 4 data: () => ({
5 5 vLines: [],
6   - hLines: []
  6 + hLines: [],
  7 + contextmenuPos: []
7 8 }),
8 9 methods: {
9 10 // TODO #!zh: 优化代码
... ... @@ -70,6 +71,21 @@ export default {
70 71 this.calcX(left)
71 72 this.calcY(top)
72 73 },
  74 + bindContextMenu (e) {
  75 + e.preventDefault() // 不显示默认的右击菜单
  76 + if (
  77 + e.target.classList.contains('element-on-edit-canvas') ||
  78 + e.target.parentElement.classList.contains('element-on-edit-canvas')
  79 + ) {
  80 + const { x, y } = this.$el.getBoundingClientRect()
  81 + this.contextmenuPos = [e.clientX - x, e.clientY - y]
  82 + } else {
  83 + this.hideContextMenu()
  84 + }
  85 + },
  86 + hideContextMenu () {
  87 + this.contextmenuPos = []
  88 + },
73 89 /**
74 90 * #!zh: renderCanvas 渲染中间画布
75 91 * elements
... ... @@ -82,7 +98,13 @@ export default {
82 98 <div
83 99 style={{ height: '100%', position: 'relative' }}
84 100 class="canvas-editor-wrapper"
85   - onClick={this.handleClickCanvasProp}
  101 + onClick={(e) => {
  102 + this.hideContextMenu()
  103 + this.handleClickCanvasProp(e)
  104 + }}
  105 + onContextmenu={e => {
  106 + this.bindContextMenu(e)
  107 + }}
86 108 >
87 109 {
88 110 elements.map((element, index) => {
... ... @@ -131,6 +153,26 @@ export default {
131 153 <div class="h-line" style={{ top: `${line.top}px` }}></div>
132 154 ))
133 155 }
  156 + {
  157 + this.contextmenuPos.length
  158 + ? <a-menu
  159 + style={{
  160 + left: this.contextmenuPos[0] + 'px',
  161 + top: this.contextmenuPos[1] + 'px',
  162 + userSelect: 'none',
  163 + position: 'absolute',
  164 + zIndex: 999
  165 + }}
  166 + >
  167 + <a-menu-item data-command='copyEditingElement'>复制</a-menu-item>
  168 + <a-menu-item data-command="deleteEditingElement">删除</a-menu-item>
  169 + <a-menu-item data-command="bringLayer2Front">置顶</a-menu-item>
  170 + <a-menu-item data-command="bringLayer2End">置底</a-menu-item>
  171 + <a-menu-item data-command="addLayerZindex">上移</a-menu-item>
  172 + <a-menu-item data-command="subtractLayerZindex">下移</a-menu-item>
  173 + </a-menu>
  174 + : null
  175 + }
134 176 </div>
135 177 )
136 178 }
... ...