From 15e1be2f310f46fcd9cb41cc0ec219da9efd2b2d Mon Sep 17 00:00:00 2001 From: wonder Date: Mon, 24 Aug 2026 03:22:25 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Mermaid=20=E6=94=BE=E5=A4=A7=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8C=B9=E9=85=8D=20article=20svg=20=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/css/mermaid-zoom.css | 5 +++-- docs/js/mermaid-zoom.js | 28 ++++++++++++---------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/docs/css/mermaid-zoom.css b/docs/css/mermaid-zoom.css index ffc0ba3..715a108 100644 --- a/docs/css/mermaid-zoom.css +++ b/docs/css/mermaid-zoom.css @@ -24,7 +24,8 @@ padding: 1.5rem; } -/* 让 Mermaid 容器看起来可点击 */ -.mermaid { +/* 让 Mermaid 区域看起来可点击 */ +.mermaid, +.mermaid svg { cursor: zoom-in; } diff --git a/docs/js/mermaid-zoom.js b/docs/js/mermaid-zoom.js index f8a8943..f39a6ac 100644 --- a/docs/js/mermaid-zoom.js +++ b/docs/js/mermaid-zoom.js @@ -1,14 +1,10 @@ // Mermaid 图表点击放大 — 事件委托方案 ;(function () { - // 创建 overlay - function openZoom(mermaidEl) { - var svg = mermaidEl.querySelector('svg'); - if (!svg) return; - - // 防止重复打开 + function openZoom(svgEl) { + if (!svgEl) return; if (document.querySelector('.mermaid-zoom-overlay')) return; - var clone = svg.cloneNode(true); + var clone = svgEl.cloneNode(true); clone.removeAttribute('width'); clone.removeAttribute('height'); clone.style.width = 'auto'; @@ -39,18 +35,18 @@ }); } - // 事件委托:点击时往上找 .mermaid + // 事件委托:点击 article 内的 svg(Mermaid 渲染产出) document.addEventListener('click', function (e) { - var target = e.target.closest('.mermaid'); - if (target) { + var svg = e.target.closest('article .mermaid svg, article .mermaid'); + if (svg) { + // 如果点击的是 .mermaid 容器本身,找里面的 svg + if (svg.tagName !== 'svg') { + svg = svg.querySelector('svg'); + } + if (!svg) return; e.preventDefault(); e.stopPropagation(); - openZoom(target); + openZoom(svg); } }); - - // 兼容 MkDocs Material instant navigation: - // 页面切换后 Mermaid 可能重新渲染,无需重新绑定(事件委托天然兼容) - // 但需要确保 .mermaid 的 cursor 样式对新渲染的图表也生效 - // (CSS 全局生效,无需额外处理) })();