I have an animation, which works fine on stackblizt (https://stackblitz.com/edit/burger?file=app%2Fburger%2Fburger.component.ts) as well as locally with ng serve --aot
, but it seems to be skipping straight to the final state on production build (ng build --prod
) http://burger.fxck.cz/
Can you stop something in the code that might be causing it?
import {
trigger,
state,
style,
animate,
transition
} from '@angular/animations';
export const EASING = 'cubic-bezier(0.5, 0.5, 0.76, 0.76)';
export function burgerLineAnimation(name: string, translateY = '15px', rotateFinal = '45deg', rotateOver = '65deg') {
return trigger(name, [
// opened state, in center, rotated, expanded
state('true', style({
transform: `translateY(${translateY}) translateX(17.5px) rotate(${rotateFinal})`,
width: '40px'
})),
transition('false => true', [
// move to center
animate(`100ms ${EASING}`, style({
transform: `translateY(${translateY})`
})),
// expand from dot to line
animate(`100ms ${EASING}`, style({
width: '40px',
transform: `translateY(${translateY}) translateX(17.5px)`
})),
// rotate over
animate(`80ms ${EASING}`, style({
transform: `translateY(${translateY}) translateX(17.5px) rotate(${rotateOver})`
})),
// rotate final
animate(`150ms ${EASING}`, style({
transform: `translateY(${translateY}) translateX(17.5px) rotate(${rotateFinal})`
}))
]),
transition('true => false', [
// level and shrink
animate(`100ms ${EASING}`, style({
transform: `translateY(${translateY}) translateX(0) rotate(0deg)`,
width: '5px'
})),
// move to proper position
animate(`100ms ${EASING}`, style({
transform: 'translateY(0)'
}))
])
]);
}
used like this in the component decorator
animations: [
burgerLineAnimation('firstLine'),
burgerLineAnimation('thirdLine', '-15px', '-45deg', '-60deg')
]
So the problem is certainly not with me using a function to return the trigger, nor with params being passed down by the function. The problem is with using booleans for state
s, if I use string instead (ie. open
, closed
instead of true
and false
). It will work fine. And let me repeat one more time, this only happens in production build, so something is perhaps being removed / stripped while it shouldn't.
I have reported the issue here and will update the answer once it gets resolved.