Revert "chore(stage): 优化高亮与单选性能"

This reverts commit babaadb0cf87829197dbfa820f0141aefea48076.
This commit is contained in:
roymondchen 2023-08-21 19:38:19 +08:00
parent 573f1a2c17
commit 0274c36afd
3 changed files with 24 additions and 27 deletions

View File

@ -85,6 +85,10 @@ export default class DragResizeHelper {
this.moveableHelper.clear(); this.moveableHelper.clear();
} }
public destroyShadowEl(): void {
this.targetShadow.destroyEl();
}
public getShadowEl(): TargetElement | undefined { public getShadowEl(): TargetElement | undefined {
return this.targetShadow.el; return this.targetShadow.el;
} }

View File

@ -71,7 +71,8 @@ export default class StageDragResize extends MoveableOptionsManager {
* @param event * @param event
*/ */
public select(el: HTMLElement, event?: MouseEvent): void { public select(el: HTMLElement, event?: MouseEvent): void {
if (!this.moveable) { // 从不能拖动到能拖动的节点之间切换要重新创建moveable不然dragStart不生效
if (!this.moveable || el !== this.target) {
this.initMoveable(el); this.initMoveable(el);
} else { } else {
this.updateMoveable(el); this.updateMoveable(el);
@ -94,13 +95,14 @@ export default class StageDragResize extends MoveableOptionsManager {
Object.entries(options).forEach(([key, value]) => { Object.entries(options).forEach(([key, value]) => {
(this.moveable as any)[key] = value; (this.moveable as any)[key] = value;
}); });
this.moveable.updateRect(); this.moveable.updateTarget();
} }
public clearSelectStatus(): void { public clearSelectStatus(): void {
if (!this.moveable) return; if (!this.moveable) return;
this.moveable.zoom = 0; this.dragResizeHelper.destroyShadowEl();
this.moveable.updateRect(); this.moveable.target = null;
this.moveable.updateTarget();
} }
/** /**
@ -109,9 +111,6 @@ export default class StageDragResize extends MoveableOptionsManager {
public destroy(): void { public destroy(): void {
this.moveable?.destroy(); this.moveable?.destroy();
this.dragResizeHelper.destroy(); this.dragResizeHelper.destroy();
this.moveable = undefined;
this.dragStatus = StageDragStatus.END; this.dragStatus = StageDragStatus.END;
this.removeAllListeners(); this.removeAllListeners();
} }
@ -133,7 +132,7 @@ export default class StageDragResize extends MoveableOptionsManager {
this.setElementGuidelines([this.target as HTMLElement], elementGuidelines); this.setElementGuidelines([this.target as HTMLElement], elementGuidelines);
return this.getOptions(false, { return this.getOptions(false, {
zoom: 1, target: this.dragResizeHelper.getShadowEl(),
}); });
} }
@ -141,8 +140,9 @@ export default class StageDragResize extends MoveableOptionsManager {
const options: MoveableOptions = this.init(el); const options: MoveableOptions = this.init(el);
this.dragResizeHelper.clear(); this.dragResizeHelper.clear();
this.moveable?.destroy();
this.moveable = new Moveable(this.container, { this.moveable = new Moveable(this.container, {
target: this.dragResizeHelper.getShadowEl(),
...options, ...options,
}); });

View File

@ -28,7 +28,7 @@ export default class StageHighlight extends EventEmitter {
public container: HTMLElement; public container: HTMLElement;
public target?: HTMLElement; public target?: HTMLElement;
public moveable?: Moveable; public moveable?: Moveable;
public targetShadow?: TargetShadow; public targetShadow: TargetShadow;
private getRootContainer: GetRootContainer; private getRootContainer: GetRootContainer;
constructor(config: StageHighlightConfig) { constructor(config: StageHighlightConfig) {
@ -52,19 +52,14 @@ export default class StageHighlight extends EventEmitter {
public highlight(el: HTMLElement): void { public highlight(el: HTMLElement): void {
if (!el || el === this.target) return; if (!el || el === this.target) return;
this.target = el; this.target = el;
this.moveable?.destroy();
this.targetShadow?.update(el); this.moveable = new Moveable(this.container, {
if (this.moveable) { target: this.targetShadow.update(el),
this.moveable.zoom = 2; origin: false,
this.moveable.updateRect(); rootContainer: this.getRootContainer(),
} else { zoom: 2,
this.moveable = new Moveable(this.container, { });
target: this.targetShadow?.el,
origin: false,
rootContainer: this.getRootContainer(),
zoom: 2,
});
}
} }
/** /**
@ -72,9 +67,9 @@ export default class StageHighlight extends EventEmitter {
*/ */
public clearHighlight(): void { public clearHighlight(): void {
if (!this.moveable || !this.target) return; if (!this.moveable || !this.target) return;
this.moveable.zoom = 0;
this.moveable.updateRect();
this.target = undefined; this.target = undefined;
this.moveable.target = null;
this.moveable.updateTarget();
} }
/** /**
@ -82,8 +77,6 @@ export default class StageHighlight extends EventEmitter {
*/ */
public destroy(): void { public destroy(): void {
this.moveable?.destroy(); this.moveable?.destroy();
this.targetShadow?.destroy(); this.targetShadow.destroy();
this.moveable = undefined;
this.targetShadow = undefined;
} }
} }