diff --git a/packages/core/src/SharedElementTransitionLayer.tsx b/packages/core/src/SharedElementTransitionLayer.tsx index 1fd7f22..5284d39 100644 --- a/packages/core/src/SharedElementTransitionLayer.tsx +++ b/packages/core/src/SharedElementTransitionLayer.tsx @@ -64,18 +64,16 @@ export class SharedElementTransitionLayer extends Component(start: T, end: T) { + getAnimationEffect(start: T, end: T) { const keyframeEffects = new Array(); - const startRect = start.instance.getBoundingClientRect(); - const endRect = end.instance.getBoundingClientRect(); const config: KeyframeEffectOptions = { fill: "both" as const, duration: "auto", easing: "ease", }; const transitionType = end.instance.transitionType; - const startTransform = `translate(${startRect.x}px, ${startRect.y}px)`; - const endTransform = `translate(${endRect.x}px, ${endRect.y}px)`; + const startTransform = `translate(${start.rect.x}px, ${start.rect.y}px)`; + const endTransform = `translate(${end.rect.x}px, ${end.rect.y}px)`; switch (transitionType) { case "fade": keyframeEffects.push( @@ -160,15 +158,15 @@ export class SharedElementTransitionLayer extends Component(); for (const [id, end] of Array.from(nextScene.nodes.entries())) { + const endRect = end.getBoundingClientRect(); const start = currentScene.nodes.get(id); if (!start?.canTransition || !end.canTransition) continue; + const startRect = start.getBoundingClientRect(); const endClone = end.clone(); const startClone = start.clone(); if (!startClone || !endClone) continue; - const styleList = Array.from(new Set([...start.styles, ...end.styles, 'width', 'height'])); + const styleList = Array.from(new Set([...start.styles, ...end.styles])); if (end.transitionType !== "morph") { startClone.id = `${id}-start`; startClone.style.position = "absolute"; @@ -202,9 +202,15 @@ export class SharedElementTransitionLayer extends Component