|
|
@@ -12,6 +12,7 @@ const company = ref('首页')
|
|
|
|
|
|
const wrapperRef = ref<HTMLDivElement>()
|
|
|
const scale = ref(1)
|
|
|
+const supportsZoom = ref(false)
|
|
|
|
|
|
let resizeObserver: ResizeObserver | null = null
|
|
|
let resizeRaf = 0
|
|
|
@@ -21,12 +22,21 @@ const targetWrapperStyle = computed(() => ({
|
|
|
height: `${DESIGN_HEIGHT * scale.value}px`
|
|
|
}))
|
|
|
|
|
|
-const targetAreaStyle = computed(() => ({
|
|
|
- width: `${DESIGN_WIDTH}px`,
|
|
|
- height: `${DESIGN_HEIGHT}px`,
|
|
|
- transform: `scale(${scale.value})`,
|
|
|
- transformOrigin: '0 0'
|
|
|
-}))
|
|
|
+const targetAreaStyle = computed(() => {
|
|
|
+ const style = {
|
|
|
+ width: `${DESIGN_WIDTH}px`,
|
|
|
+ height: `${DESIGN_HEIGHT}px`,
|
|
|
+ transformOrigin: '0 0'
|
|
|
+ } as Record<string, string | number>
|
|
|
+
|
|
|
+ if (supportsZoom.value) {
|
|
|
+ style.zoom = scale.value
|
|
|
+ } else {
|
|
|
+ style.transform = `scale(${scale.value})`
|
|
|
+ }
|
|
|
+
|
|
|
+ return style
|
|
|
+})
|
|
|
|
|
|
function updateScale() {
|
|
|
cancelAnimationFrame(resizeRaf)
|
|
|
@@ -43,12 +53,12 @@ function updateScale() {
|
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
|
+ supportsZoom.value = typeof CSS !== 'undefined' && CSS.supports?.('zoom', '1') === true
|
|
|
nextTick(updateScale)
|
|
|
resizeObserver = new ResizeObserver(updateScale)
|
|
|
if (wrapperRef.value) {
|
|
|
resizeObserver.observe(wrapperRef.value)
|
|
|
}
|
|
|
-
|
|
|
window.addEventListener('resize', updateScale)
|
|
|
})
|
|
|
|