fix(animations): report correct totalTime value even during noOp animations (#22225)
This patch ensures that if the NoopAnimationsModule is used then it will correctly report the associated `totalTime` property within the emitted AnimationEvent instance when an animation event trigger is fired. BREAKING CHANGE: When animation is trigged within a disabled zone, the associated event (which an instance of AnimationEvent) will no longer report the totalTime as 0 (it will emit the actual time of the animation). To detect if an animation event is reporting a disabled animation then the `event.disabled` property can be used instead. PR Close #22225
This commit is contained in:

committed by
Victor Berchet

parent
884de18cba
commit
e1bf067090
@ -75,23 +75,24 @@ export function listenOnPlayer(
|
||||
callback: (event: any) => any) {
|
||||
switch (eventName) {
|
||||
case 'start':
|
||||
player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player.totalTime)));
|
||||
player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));
|
||||
break;
|
||||
case 'done':
|
||||
player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player.totalTime)));
|
||||
player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));
|
||||
break;
|
||||
case 'destroy':
|
||||
player.onDestroy(
|
||||
() => callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)));
|
||||
player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
export function copyAnimationEvent(
|
||||
e: AnimationEvent, phaseName?: string, totalTime?: number): AnimationEvent {
|
||||
e: AnimationEvent, phaseName: string, player: AnimationPlayer): AnimationEvent {
|
||||
const totalTime = player.totalTime;
|
||||
const disabled = (player as any).disabled ? true : false;
|
||||
const event = makeAnimationEvent(
|
||||
e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName,
|
||||
totalTime == undefined ? e.totalTime : totalTime);
|
||||
totalTime == undefined ? e.totalTime : totalTime, disabled);
|
||||
const data = (e as any)['_data'];
|
||||
if (data != null) {
|
||||
(event as any)['_data'] = data;
|
||||
@ -101,8 +102,8 @@ export function copyAnimationEvent(
|
||||
|
||||
export function makeAnimationEvent(
|
||||
element: any, triggerName: string, fromState: string, toState: string, phaseName: string = '',
|
||||
totalTime: number = 0): AnimationEvent {
|
||||
return {element, triggerName, fromState, toState, phaseName, totalTime};
|
||||
totalTime: number = 0, disabled?: boolean): AnimationEvent {
|
||||
return {element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled};
|
||||
}
|
||||
|
||||
export function getOrSetAsInMap(
|
||||
|
Reference in New Issue
Block a user