修复资源画本动画结束瞬间的位置跳变
动画期间卡片尺寸/位置一变(子画布卡片尺寸要等预览图尺寸到位才算准,通常正好落在动画末尾),原先直接 settle 掉动画,真实场景瞬间接管,表现为结束瞬间跳一下 改为从当前叠加层几何重定向:begin 捕获当前飞行位置,再平滑续到新的目标位置,动画不再被掐断 补充 effect 依赖 resourceBookState.phase
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user