From e2efce550f1d69369307cb98999664e9d6237204 Mon Sep 17 00:00:00 2001 From: Kaxi <1042864399@qq.com> Date: Sun, 31 May 2026 22:44:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=87=E7=AB=A0=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E7=BC=A9=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 点击图片全屏遮罩放大,Esc 或点击遮罩关闭,纯自定义实现无额外依赖。 Co-Authored-By: Claude Sonnet 4.6 --- components/content/ProseImg.vue | 80 +++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/components/content/ProseImg.vue b/components/content/ProseImg.vue index b2f5af5..809a127 100644 --- a/components/content/ProseImg.vue +++ b/components/content/ProseImg.vue @@ -5,17 +5,91 @@ const props = defineProps<{ }>() const route = useRoute() +const isZoomed = ref(false) const resolvedSrc = computed(() => { if (!props.src) return '' - // 绝对路径直接用 if (props.src.startsWith('/') || props.src.startsWith('http')) return props.src - // 相对路径:基于当前路由拼接 const base = route.path.replace(/\/$/, '') return `${base}/${props.src}` }) + +function open() { + isZoomed.value = true +} + +function close() { + isZoomed.value = false +} + +function onKeydown(e: KeyboardEvent) { + if (e.key === 'Escape') close() +} + +onMounted(() => document.addEventListener('keydown', onKeydown)) +onUnmounted(() => document.removeEventListener('keydown', onKeydown)) + +