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 | 1 | import { mapState, mapActions } from 'vuex' |
| 2 | 2 | import Shape from '../../support/shape' |
| 3 | +import { contains } from '../../../../utils/dom-helper' | |
| 3 | 4 | |
| 4 | 5 | const contextmenuOptions = [ |
| 5 | 6 | { |
| ... | ... | @@ -231,9 +232,24 @@ export default { |
| 231 | 232 | { |
| 232 | 233 | this.contextmenuPos.length |
| 233 | 234 | ? <a-menu |
| 235 | + ref="contextmenu" | |
| 234 | 236 | onSelect={({ item, key, selectedKeys }) => { |
| 235 | 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 | 253 | style={{ |
| 238 | 254 | left: this.contextmenuPos[0] + 'px', |
| 239 | 255 | top: this.contextmenuPos[1] + 'px', |
| ... | ... | @@ -242,7 +258,13 @@ export default { |
| 242 | 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 | 268 | </a-menu> |
| 247 | 269 | : null |
| 248 | 270 | } | ... | ... |