fix:修复放大情况下下拉偏移的情况
This commit is contained in:
@@ -66,9 +66,10 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
|
|
||||||
const dropdownStyle = computed<CSSProperties>(() => {
|
const dropdownStyle = computed<CSSProperties>(() => {
|
||||||
|
const zoom = parseFloat(getComputedStyle(document.body).zoom) || 1
|
||||||
return {
|
return {
|
||||||
left: `${dropdownPosition.x}px`,
|
left: `${dropdownPosition.x / zoom}px`,
|
||||||
top: `${dropdownPosition.y}px`,
|
top: `${dropdownPosition.y / zoom}px`,
|
||||||
visibility: isShow.value ? 'visible' : 'hidden',
|
visibility: isShow.value ? 'visible' : 'hidden',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -55,10 +55,11 @@ export default defineComponent({
|
|||||||
function onResize() {
|
function onResize() {
|
||||||
if (triggerRef.value) {
|
if (triggerRef.value) {
|
||||||
const { width, height, left, top } = triggerRef.value.getBoundingClientRect()
|
const { width, height, left, top } = triggerRef.value.getBoundingClientRect()
|
||||||
|
const zoom = parseFloat(getComputedStyle(document.body).zoom) || 1
|
||||||
dropdownPosition.value = {
|
dropdownPosition.value = {
|
||||||
w: width,
|
w: width / zoom,
|
||||||
x: left,
|
x: left / zoom,
|
||||||
y: top + height + 2,
|
y: top / zoom + height / zoom + 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,17 +56,18 @@ export default defineComponent({
|
|||||||
const dropdownPosition = ref({ x: 0, y: 0, w: 0, z: 0 })
|
const dropdownPosition = ref({ x: 0, y: 0, w: 0, z: 0 })
|
||||||
// 下拉框位置
|
// 下拉框位置
|
||||||
const dropdownStyle = computed<CSSProperties>(() => {
|
const dropdownStyle = computed<CSSProperties>(() => {
|
||||||
|
const zoom = parseFloat(getComputedStyle(document.body).zoom) || 1
|
||||||
if (dropdownPosition.value.z == 0) {
|
if (dropdownPosition.value.z == 0) {
|
||||||
return {
|
return {
|
||||||
left: `${dropdownPosition.value.x}px`,
|
left: `${dropdownPosition.value.x / zoom}px`,
|
||||||
top: `${dropdownPosition.value.y}px`,
|
top: `${dropdownPosition.value.y / zoom}px`,
|
||||||
width: `${dropdownPosition.value.w}px`,
|
width: `${dropdownPosition.value.w / zoom}px`,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
left: `${dropdownPosition.value.x}px`,
|
left: `${dropdownPosition.value.x / zoom}px`,
|
||||||
bottom: `${dropdownPosition.value.z}px`,
|
bottom: `${dropdownPosition.value.z / zoom}px`,
|
||||||
width: `${dropdownPosition.value.w}px`,
|
width: `${dropdownPosition.value.w / zoom}px`,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -82,10 +82,11 @@ export default defineComponent({
|
|||||||
function onResize() {
|
function onResize() {
|
||||||
if (triggerRef.value) {
|
if (triggerRef.value) {
|
||||||
const { width, height, left, top } = triggerRef.value.getBoundingClientRect()
|
const { width, height, left, top } = triggerRef.value.getBoundingClientRect()
|
||||||
|
const zoom = parseFloat(getComputedStyle(document.body).zoom) || 1
|
||||||
dropdownPosition.value = {
|
dropdownPosition.value = {
|
||||||
w: width,
|
w: width / zoom,
|
||||||
x: left - 2,
|
x: left / zoom - 2,
|
||||||
y: top + height + 2,
|
y: (top + height + 2) / zoom,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,17 +80,18 @@ export default defineComponent({
|
|||||||
const dropdownPosition = ref({ x: 0, y: 0, w: 0, z: 0 })
|
const dropdownPosition = ref({ x: 0, y: 0, w: 0, z: 0 })
|
||||||
// 下拉框位置
|
// 下拉框位置
|
||||||
const dropdownStyle = computed<CSSProperties>(() => {
|
const dropdownStyle = computed<CSSProperties>(() => {
|
||||||
|
const zoom = parseFloat(getComputedStyle(document.body).zoom) || 1
|
||||||
if (dropdownPosition.value.z == 0) {
|
if (dropdownPosition.value.z == 0) {
|
||||||
return {
|
return {
|
||||||
left: `${dropdownPosition.value.x}px`,
|
left: `${dropdownPosition.value.x / zoom}px`,
|
||||||
top: `${dropdownPosition.value.y}px`,
|
top: `${dropdownPosition.value.y / zoom}px`,
|
||||||
width: `${dropdownPosition.value.w}px`,
|
width: `${dropdownPosition.value.w / zoom}px`,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
left: `${dropdownPosition.value.x}px`,
|
left: `${dropdownPosition.value.x / zoom}px`,
|
||||||
bottom: `${dropdownPosition.value.z}px`,
|
bottom: `${dropdownPosition.value.z / zoom}px`,
|
||||||
width: `${dropdownPosition.value.w}px`,
|
width: `${dropdownPosition.value.w / zoom}px`,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -102,14 +103,14 @@ export default defineComponent({
|
|||||||
dropdownPosition.value = {
|
dropdownPosition.value = {
|
||||||
w: width,
|
w: width,
|
||||||
x: left,
|
x: left,
|
||||||
y: top + height + 2,
|
y: (top + height + 2),
|
||||||
z: 0,
|
z: 0,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dropdownPosition.value = {
|
dropdownPosition.value = {
|
||||||
w: width,
|
w: width,
|
||||||
x: left,
|
x: left,
|
||||||
z: window.innerHeight - top + 2,
|
z: (window.innerHeight - top + 2),
|
||||||
y: 0,
|
y: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="w-full mt-0 h-100% overflow-y-auto" :style="`zoom:${zoom}`">
|
<div class="w-full mt-0 h-100% overflow-y-auto">
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<RouterView></RouterView>
|
<RouterView></RouterView>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
@@ -15,4 +15,9 @@ const zoom = computed(() => {
|
|||||||
import { useDialog } from '@/components/hooks/dialog'
|
import { useDialog } from '@/components/hooks/dialog'
|
||||||
|
|
||||||
const { render } = useDialog()
|
const { render } = useDialog()
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
document.body.style.overflow = 'hidden'
|
||||||
|
document.body.style.zoom = zoom.value.toString()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user