From 2dda4f34885d084d526f184ebb083406bbaea298 Mon Sep 17 00:00:00 2001 From: oceanzhu Date: Tue, 25 Oct 2022 16:19:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor(stage):=20=E5=88=A0=E9=99=A4stageCore?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E7=9A=84=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=BA=86getScrollParent=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=8C=E6=97=A0=E9=9C=80=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E4=BC=A0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/stage/src/StageCore.ts | 2 +- packages/stage/src/StageMask.ts | 6 ++---- packages/stage/src/util.ts | 3 +++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/stage/src/StageCore.ts b/packages/stage/src/StageCore.ts index 8dc4740b..7a18b65e 100644 --- a/packages/stage/src/StageCore.ts +++ b/packages/stage/src/StageCore.ts @@ -77,7 +77,7 @@ export default class StageCore extends EventEmitter { this.containerHighlightType = config.containerHighlightType; this.renderer = new StageRender({ runtimeUrl: config.runtimeUrl, render: this.render.bind(this) }); - this.mask = new StageMask(this.renderer.getDocument()?.documentElement); + this.mask = new StageMask(); this.dr = new StageDragResize({ core: this, container: this.mask.content, mask: this.mask }); this.multiDr = new StageMultiDragResize({ core: this, container: this.mask.content, mask: this.mask }); this.highlightLayer = new StageHighlight({ core: this, container: this.mask.wrapper }); diff --git a/packages/stage/src/StageMask.ts b/packages/stage/src/StageMask.ts index c1fd9901..04bfd9a1 100644 --- a/packages/stage/src/StageMask.ts +++ b/packages/stage/src/StageMask.ts @@ -84,7 +84,6 @@ export default class StageMask extends Rule { private pageScrollParent: HTMLElement | null = null; private intersectionObserver: IntersectionObserver | null = null; private wrapperResizeObserver: ResizeObserver | null = null; - private renderEl?: HTMLElement; /** * 高亮事件处理函数 @@ -94,12 +93,11 @@ export default class StageMask extends Rule { this.emit('highlight', event); }, throttleTime); - constructor(renderEl: HTMLElement | undefined) { + constructor() { const wrapper = createWrapper(); super(wrapper); this.wrapper = wrapper; - this.renderEl = renderEl; this.initContentEventListener(); this.wrapper.appendChild(this.content); @@ -224,7 +222,7 @@ export default class StageMask extends Rule { * 监听选中元素是否在画布可视区域内,如果目标元素不在可视区域内,通过滚动使该元素出现在可视区域 */ private initObserverIntersection(): void { - this.pageScrollParent = getScrollParent(this.page as HTMLElement) || this.renderEl || null; + this.pageScrollParent = getScrollParent(this.page as HTMLElement) || null; this.intersectionObserver?.disconnect(); if (typeof IntersectionObserver !== 'undefined') { diff --git a/packages/stage/src/util.ts b/packages/stage/src/util.ts index 35bd214b..4c8a5aa5 100644 --- a/packages/stage/src/util.ts +++ b/packages/stage/src/util.ts @@ -119,6 +119,9 @@ export const getScrollParent = (element: HTMLElement, includeHidden = false): HT for (let parent = element; parent.parentElement; ) { parent = parent.parentElement; + + if (parent.tagName === 'HTML') return parent; + style = getComputedStyle(parent); if (isAbsolute(style) && isStatic(style)) continue;