|
@@ -1,11 +1,12 @@
|
|
|
<template>
|
|
|
<div
|
|
|
class="cover-layout"
|
|
|
- @click.stop.prevent="clickHandler"
|
|
|
+ @click="clickHandler"
|
|
|
@mousedown.stop.prevent="downHandler"
|
|
|
@touchstart.stop.prevent="downHandler"
|
|
|
:class="{ move: move }"
|
|
|
:style="style"
|
|
|
+ ref="dom"
|
|
|
>
|
|
|
<slot />
|
|
|
</div>
|
|
@@ -17,13 +18,16 @@ import {Pos, Pos3D} from '@/sdk'
|
|
|
import {useSDK} from '@/hook'
|
|
|
import { getPostionByTarget} from '@/components/base/utils'
|
|
|
|
|
|
-const props = defineProps<{ pos: Pos3D }>()
|
|
|
+const props = defineProps<{
|
|
|
+ pos: Pos3D
|
|
|
+}>()
|
|
|
const emit = defineEmits<{
|
|
|
(m: 'changePos', pos: Pos3D): void
|
|
|
(m: 'focus'): void
|
|
|
(m: 'blur'): void
|
|
|
}>()
|
|
|
const sdk = useSDK()
|
|
|
+const dom = ref<HTMLElement>()
|
|
|
|
|
|
const screen = ref<Pos>(null)
|
|
|
const style = computed(
|
|
@@ -95,9 +99,11 @@ const downHandler = (sev: MouseEvent | TouchEvent) => {
|
|
|
const clickHandler = ev => {
|
|
|
emit("focus")
|
|
|
|
|
|
- const handler = () => {
|
|
|
- emit("blur")
|
|
|
- document.documentElement.removeEventListener("click", handler)
|
|
|
+ const handler = (ev: MouseEvent) => {
|
|
|
+ if (!dom.value.contains(ev.target as HTMLElement) && ev.target !== dom.value) {
|
|
|
+ emit("blur")
|
|
|
+ document.documentElement.removeEventListener("click", handler)
|
|
|
+ }
|
|
|
}
|
|
|
document.documentElement.addEventListener("click", handler, { passive: true })
|
|
|
}
|