Commit a4b13f8df155351a32b355de487e654d40f1a459
1 parent
a7875cbc
feat: add the right-click menu, step1: just show menu
Showing
1 changed file
with
44 additions
and
2 deletions
front-end/h5/src/components/core/editor/canvas/edit.js
| @@ -3,7 +3,8 @@ export default { | @@ -3,7 +3,8 @@ export default { | ||
| 3 | props: ['elements', 'editingElement', 'handleClickElementProp', 'handleClickCanvasProp'], | 3 | props: ['elements', 'editingElement', 'handleClickElementProp', 'handleClickCanvasProp'], |
| 4 | data: () => ({ | 4 | data: () => ({ |
| 5 | vLines: [], | 5 | vLines: [], |
| 6 | - hLines: [] | 6 | + hLines: [], |
| 7 | + contextmenuPos: [] | ||
| 7 | }), | 8 | }), |
| 8 | methods: { | 9 | methods: { |
| 9 | // TODO #!zh: 优化代码 | 10 | // TODO #!zh: 优化代码 |
| @@ -70,6 +71,21 @@ export default { | @@ -70,6 +71,21 @@ export default { | ||
| 70 | this.calcX(left) | 71 | this.calcX(left) |
| 71 | this.calcY(top) | 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 | * #!zh: renderCanvas 渲染中间画布 | 90 | * #!zh: renderCanvas 渲染中间画布 |
| 75 | * elements | 91 | * elements |
| @@ -82,7 +98,13 @@ export default { | @@ -82,7 +98,13 @@ export default { | ||
| 82 | <div | 98 | <div |
| 83 | style={{ height: '100%', position: 'relative' }} | 99 | style={{ height: '100%', position: 'relative' }} |
| 84 | class="canvas-editor-wrapper" | 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 | elements.map((element, index) => { | 110 | elements.map((element, index) => { |
| @@ -131,6 +153,26 @@ export default { | @@ -131,6 +153,26 @@ export default { | ||
| 131 | <div class="h-line" style={{ top: `${line.top}px` }}></div> | 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 | </div> | 176 | </div> |
| 135 | ) | 177 | ) |
| 136 | } | 178 | } |