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;