修复资源画本动画结束瞬间的位置跳变

动画期间卡片尺寸/位置一变(子画布卡片尺寸要等预览图尺寸到位才算准,通常正好落在动画末尾),原先直接 settle 掉动画,真实场景瞬间接管,表现为结束瞬间跳一下
改为从当前叠加层几何重定向:begin 捕获当前飞行位置,再平滑续到新的目标位置,动画不再被掐断
补充 effect 依赖 resourceBookState.phase
This commit is contained in:
2026-09-09 17:16:38 +08:00
parent cca4881e13
commit ed50ad122f
@@ -2585,10 +2585,31 @@ export default function ProjectDevelopmentView({
previous.resources !== current.resources ||
previous.sortMode !== current.sortMode)
) {
resourceBookTransitionControllerRef.current.settle();
// 卡片尺寸要等预览图尺寸到位才算准,通常正好落在动画末尾;直接 settle
// 会让真实场景瞬间接管,看起来就是结束瞬间跳一下。改为从当前叠加层几何
// 重定向,动画平滑续到新的目标位置。
const manager = resourceBookManagerRef.current;
const controller = resourceBookTransitionControllerRef.current;
if (resourceBookState.phase !== 'idle' && manager) {
const retargetToken = controller.begin(manager);
controller.play(
manager,
retargetToken,
() => {
dispatchResourceBook({
type: 'finish-transition',
token: resourceBookState.token,
});
},
resourceBookState.phase === 'returning-main' ? 'target' : 'source',
);
} else {
controller.settle();
}
}
}, [
resourceBookState.token,
resourceBookState.phase,
activeResourceCanvasViewport,
resourceBookOverviewRects,
resourcePositionById,