diff options
Diffstat (limited to 'UI source code/dns_mapping_ui-master/src/utils/fackClickOutSide.js')
| -rw-r--r-- | UI source code/dns_mapping_ui-master/src/utils/fackClickOutSide.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/UI source code/dns_mapping_ui-master/src/utils/fackClickOutSide.js b/UI source code/dns_mapping_ui-master/src/utils/fackClickOutSide.js new file mode 100644 index 0000000..9b1f0a2 --- /dev/null +++ b/UI source code/dns_mapping_ui-master/src/utils/fackClickOutSide.js @@ -0,0 +1,45 @@ +let lock = true +let el = null +// const MousedownEvent = new Event('mousedown', { bubbles: true }) +// const MouseupEvent = new Event('mouseup', { bubbles: true }) +const MousedownEvent = document.createEvent('Events') +MousedownEvent.initEvent('mousedown', true, true) +const MouseupEvent = document.createEvent('Events') +MouseupEvent.initEvent('mouseup', true, true) +const fakeClickOutSide = () => { + document.dispatchEvent(MousedownEvent) + document.dispatchEvent(MouseupEvent) + lock = true // console.log('dispatchEvent'); +} +const mousedownHandle = e => { + const classList = e.target.classList + if (classList.contains('el-select__caret') || classList.contains('el-input__inner') || classList.contains('el-select__tags')) { + lock = false + return + } + if (lock) return + fakeClickOutSide() +} +const mousewheelHandle = e => { + if (lock || e.target.classList.contains('el-select-dropdown__item') || e.target.parentNode.classList.contains('el-select-dropdown__item') || e.target.classList.contains('el-cascader-node__label') || e.target.parentNode.classList.contains('el-cascader-node__label')) return + fakeClickOutSide() +} +const eventListener = (type) => { + el[type + 'EventListener']('mousedown', mousedownHandle) + window[type + 'EventListener']('mousewheel', mousewheelHandle) + window[type + 'EventListener']('DOMMouseScroll', mousewheelHandle) // fireFox 3.5+ +} +export default { + mounted() { + el = this.$root.$el + el.addFakeClickOutSideEventCount = el.addFakeClickOutSideEventCount || 0; + (!el.addFakeClickOutSideEventCount) && this.$nextTick(() => { + eventListener('add') + }) + el.addFakeClickOutSideEventCount += 1 + }, + destroyed() { + eventListener('remove') + el.addFakeClickOutSideEventCount -= 1 + } +} |
