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