From f9c1caed6d507be8d31c64284e997e2b5d9f0527 Mon Sep 17 00:00:00 2001 From: seaHi Date: Wed, 23 Sep 2026 14:58:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=99=A8=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E5=9D=90=E6=A0=87=E5=81=8F=E7=A7=BB=E5=B9=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8A=A0=E8=BD=BD=E6=B5=8B=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/editor/imagePreviewPlugin.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/editor/imagePreviewPlugin.ts b/src/lib/editor/imagePreviewPlugin.ts index 07a4a63..29af1ed 100644 --- a/src/lib/editor/imagePreviewPlugin.ts +++ b/src/lib/editor/imagePreviewPlugin.ts @@ -12,26 +12,35 @@ class ImagePreviewWidget extends WidgetType { return this.url === other.url; } - toDOM() { + toDOM(view: EditorView) { const wrap = document.createElement('div'); wrap.className = 'cm-image-preview-wrapper'; wrap.style.userSelect = 'none'; wrap.contentEditable = 'false'; + // 块级预览的间距必须计入自身高度,避免外边距折叠导致点击坐标偏移。 + wrap.style.padding = '8px 0'; const img = document.createElement('img'); + img.onload = img.onerror = () => view.requestMeasure(); img.src = this.url; img.className = 'cm-image-preview'; img.style.maxWidth = '100%'; img.style.maxHeight = '400px'; img.style.objectFit = 'contain'; img.style.display = 'block'; - img.style.marginTop = '8px'; - img.style.marginBottom = '8px'; + img.style.margin = '0'; img.style.border = '1px solid #e5e7eb'; wrap.appendChild(img); return wrap; } + + destroy(dom: HTMLElement) { + const img = dom.querySelector('img'); + if (img) { + img.onload = img.onerror = null; + } + } } function getImageDecorationsForState(state: EditorState) {