Commit ada722c1a044cf5ec12a27e4c79e0145725893a7
1 parent
7585b8e7
perf(contextmenu) hide contextmenu when mouse leave outside
Showing
2 changed files
with
34 additions
and
1 deletions
front-end/h5/src/components/core/editor/canvas/edit.js
| 1 | import { mapState, mapActions } from 'vuex' | 1 | import { mapState, mapActions } from 'vuex' |
| 2 | import Shape from '../../support/shape' | 2 | import Shape from '../../support/shape' |
| 3 | +import { contains } from '../../../../utils/dom-helper' | ||
| 3 | 4 | ||
| 4 | const contextmenuOptions = [ | 5 | const contextmenuOptions = [ |
| 5 | { | 6 | { |
| @@ -231,9 +232,24 @@ export default { | @@ -231,9 +232,24 @@ export default { | ||
| 231 | { | 232 | { |
| 232 | this.contextmenuPos.length | 233 | this.contextmenuPos.length |
| 233 | ? <a-menu | 234 | ? <a-menu |
| 235 | + ref="contextmenu" | ||
| 234 | onSelect={({ item, key, selectedKeys }) => { | 236 | onSelect={({ item, key, selectedKeys }) => { |
| 235 | this.elementManager({ type: key }) | 237 | this.elementManager({ type: key }) |
| 236 | }} | 238 | }} |
| 239 | + // refrence: https://github.com/vueComponent/ant-design-vue/blob/master/components/vc-trigger/Trigger.jsx#L205 | ||
| 240 | + onMouseleave={(e) => { | ||
| 241 | + const contextmenu = this.$refs.contextmenu | ||
| 242 | + if ( | ||
| 243 | + e && | ||
| 244 | + e.relatedTarget && | ||
| 245 | + contextmenu && | ||
| 246 | + contextmenu.$el && | ||
| 247 | + contains(e.relatedTarget, contextmenu.$el) | ||
| 248 | + ) { | ||
| 249 | + return | ||
| 250 | + } | ||
| 251 | + this.hideContextMenu() | ||
| 252 | + }} | ||
| 237 | style={{ | 253 | style={{ |
| 238 | left: this.contextmenuPos[0] + 'px', | 254 | left: this.contextmenuPos[0] + 'px', |
| 239 | top: this.contextmenuPos[1] + 'px', | 255 | top: this.contextmenuPos[1] + 'px', |
| @@ -242,7 +258,13 @@ export default { | @@ -242,7 +258,13 @@ export default { | ||
| 242 | zIndex: 999 | 258 | zIndex: 999 |
| 243 | }} | 259 | }} |
| 244 | > | 260 | > |
| 245 | - { contextmenuOptions.map(option => <a-menu-item key={option.value} data-command={option.value}>{this.$t(option.i18nLabel)}</a-menu-item>) } | 261 | + { contextmenuOptions.map(option => ( |
| 262 | + <a-menu-item | ||
| 263 | + key={option.value} | ||
| 264 | + data-command={option.value} | ||
| 265 | + >{this.$t(option.i18nLabel)}</a-menu-item> | ||
| 266 | + )) | ||
| 267 | + } | ||
| 246 | </a-menu> | 268 | </a-menu> |
| 247 | : null | 269 | : null |
| 248 | } | 270 | } |