From d23a318003e9d6dad1480df560fb36ac3005554f Mon Sep 17 00:00:00 2001 From: roymondchen Date: Sat, 7 May 2022 19:55:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E9=80=89=E4=B8=AD=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=90=8E=E8=87=AA=E5=8A=A8=E6=BB=9A=E5=8A=A8=E5=88=B0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/stage/src/StageCore.ts | 3 +++ packages/stage/src/StageMask.ts | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/stage/src/StageCore.ts b/packages/stage/src/StageCore.ts index 2228a552..a3e15fa1 100644 --- a/packages/stage/src/StageCore.ts +++ b/packages/stage/src/StageCore.ts @@ -154,6 +154,9 @@ export default class StageCore extends EventEmitter { } this.mask.setLayout(el); + + el.scrollIntoView(); + this.dr.select(el, event); this.selectedDom = el; diff --git a/packages/stage/src/StageMask.ts b/packages/stage/src/StageMask.ts index 86c2b571..c41017a0 100644 --- a/packages/stage/src/StageMask.ts +++ b/packages/stage/src/StageMask.ts @@ -130,9 +130,14 @@ export default class StageMask extends Rule { if (!page) return; this.page = page; + + this.pageScrollParent?.removeEventListener('scroll', this.pageScrollParentScrollHandler); + this.pageScrollParent = getScrollParent(page) || this.core.renderer.contentWindow?.document.documentElement || null; this.pageResizeObserver?.disconnect(); + this.pageScrollParent?.addEventListener('scroll', this.pageScrollParentScrollHandler); + if (typeof ResizeObserver !== 'undefined') { this.pageResizeObserver = new ResizeObserver((entries) => { const [entry] = entries; @@ -313,4 +318,11 @@ export default class StageMask extends Rule { private mouseLeaveHandler = () => { setTimeout(() => this.emit('clearHighlight'), throttleTime); }; + + private pageScrollParentScrollHandler = () => { + if (!this.pageScrollParent) return; + this.scrollLeft = this.pageScrollParent.scrollLeft; + this.scrollTop = this.pageScrollParent.scrollTop; + this.scroll(); + }; }