PROBLEM ROZWIAZANY, wytlumaczenie pod koniec:
Chcialbym za pomoca animacji w Angularze miec dzialajace przejscie ze stanu wbudowanego void do *
(void => *
) i odwrotne, *
do void (*
=> void) czyli inaczej :enter i :leave. Dopoki mam zdefiniowane dwa stany bez wbudowanych, wszystko dziala dobrze i czasy animacji tez sa poprawne, nawet w Chrome DevTools Animation Inspector wykrywa mi te animacje. Oto kod:
import { trigger, style, state, transition, animate } from "@angular/core";
export const PodswietlWyzwalacz = trigger("rzadPodkresl", [
state("selected", style({
backgroundColor: "lightgreen",
fontSize: "30px"
})),
state("notselected", style({
backgroundColor: "lightsalmon",
fontSize: "22px"
}))
transition("selected => notselected", animate("2000ms")),
transition("notselected => selected", animate("4000ms 2000ms ease-in"))
]);
Natomiast gdy dodaje przejscia animacji uwzgledniajac stany wbudowane, efekt jest taki, ze dla moich stanow(notselected i selected) animacje dzialaja, ale nie zgadza sie ich czas trwania i nie dzialaja w ogole pozostale animacje(przejscia uwzgledniajace stany wbudowane) i nie wykrywa w inspektorze zadnych animacji. Szukalem juz sporo w Internecie i ciezko mi odgadnac dlaczego to nie dziala. Oto kod ze stanami wbudowanymi:
import { trigger, style, state, transition, animate } from "@angular/core";
export const PodswietlWyzwalacz = trigger("rzadPodkresl", [
state("selected", style({
backgroundColor: "lightgreen",
fontSize: "30px"
})),
state("notselected", style({
backgroundColor: "lightsalmon",
fontSize: "22px"
})),
state("*", style({
border: "solid black 2px"
})),
state("void", style({
opacity: 0
})),
transition("void => * , * => void", animate("5000ms")),
transition("selected => notselected", animate("2000ms")),
transition("notselected => selected", animate("4000ms 2000ms ease-in")),
transition("* => notselected", animate("2000ms")),
transition("* => selected", animate("4000ms")),
transition("selected => *", animate("2000ms")),
transition("notselected => *", animate("4000ms"))
]);
Bylbym wdzieczny za wskazanie co jest zle i jak to naprawic, bo juz nie mam pomyslu.
ROZWIAZANIE PROBLEMU:
Udalo mi sie troche zmienionym podejsciem uruchomic stany wbudowane. Kody wyzsze wzbogacilem o wlasciwosc definiowania stylu ostatecznego jako drugi parametr w animate, np. :
transition("notselected => selected", animate("4000ms 2000ms linear",
style({
backgroundColor: "lightgreen",
fontSize: "30px"
}))),
Wskazowki: jesli jedna wlasciwosc "ostateczna" jest juz zdefiniowana w stylu stanu wbudowanego, to nie nalezy jej dublowac wewnatrz drugiego parametru animate. Konsola sie nie skarzy, ale po prostu wtedy to nie dziala.
Dodatkowo jesli definiujemy zmiane jednej wlasciwosci z jednego stylu do drugiego, to musi byc jasno zaznaczone z ktorej na ktora. Ja mialem przejscie z opacity: 0 do opacity: 1, ale myslalem, ze domyslnie jest opacity: 1 i tego nie zaznaczylem, wiec poczatkowo nie dzialalo, dopiero doprecyzowanie pomoglo.