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 | 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 | } | ... | ... |