• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wykonywanie funkcji po funkcji animacji

Object Storage Arubacloud
+1 głos
140 wizyt
pytanie zadane 7 października 2017 w JavaScript przez ShiroUmizake Nałogowiec (46,300 p.)

Mam animację wyświetlania liter podobną do Typed. Tyle, że to działa w React. Pierwszy koncept to było stworzenie plugina w React. ale pomysł odpdał , gdyż główna funkcja renderująca to był callback i za bardzo nie chciał pobierać zmienionej wartości tzn. pobrał raz i tyle. Pewnie z Redux-em da się to ogarnąć, ale nie chciałem właściwie do takiej pierdoły z niego korzystać. Zaznaczę , że silnik animacji znajdował się w innej klasie.

Ogólnie problem rozwiązałem troszeczkę inaczej.

Pierw przykładowa domena:

this.animatedObject ={
    maternickiText : {
       textAnimate : 'aternicki',
       counter: 0,
       keyTo: 'text1'
     },

Zaczynamy od tego, gdy komponent jest montowany to:

componentWillMount(){
  window.setTimeout(()=>{
    this.animate(this.animatedObject.maternickiText)} , 1000);
  window.setTimeout(()=>{
    this.animate(this.animatedObject.meText)} , 2100);
  window.setTimeout(()=>{
    this.animate(this.animatedObject.speclazizationText)} , 2400);
}

A tu wyżej przedstawione animate.

animate(object){
    if (object.counter > object.textAnimate.length){
      return;
    }
    let subText = this.sliceText(object.textAnimate , object.counter);
    object.counter++;
    console.log(object.counter);
    this.changeState(subText , object.keyTo)
    window.setTimeout(()=>{this.animate(object)}, 100);
}

Chyba, tłumaczyć za bardzo nie muszę. co ten kod robi.

Zatrzymajmy się na componentMount. Zauważmy, że kod, jest użależniony od jednostki czasu. I jednych wykona się szybciej a u innych wolniej. Tak wiem, że mogę wywołować if kolejne wykonanie, tej samej metody, ale nie zawsze to będzie animate (gdyż dla dalszych elementów tego komponentu planuje inne animacje). Jednym rozwiązaniem jest użycie object.keys() bądż for of po polach obiektu a innym obiecanka?

Pytanie czy React mi na to pozwoli :D na zejście na niższy poziom (W sumie nie testowałem). Bardziej, się skłaniałbym się dla obiecanki, ale nigdy nie spotkałem się z takim czymś. Czy ktoś kiedyś spotkał z podobnym problemem i może ma jakąś dobrą praktykę na ten problem. 

btw. Wiem, że jest trik CSS-owy, ale moim przypadku nie przejdzie gdyż background to obraz.  

 

1 odpowiedź

0 głosów
odpowiedź 7 października 2017 przez Ehlert Ekspert (212,670 p.)

pomysł odpdał , gdyż główna funkcja renderująca to był callback i za bardzo nie chciał pobierać zmienionej wartości tzn. pobrał raz i tyle.

A próbowałeś zamiast callbacków promise chaining?

komentarz 7 października 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
Nie próbowałem.

Podobne pytania

0 głosów
1 odpowiedź 189 wizyt
0 głosów
1 odpowiedź 282 wizyt
pytanie zadane 14 sierpnia 2020 w JavaScript przez rob Bywalec (2,440 p.)

92,555 zapytań

141,402 odpowiedzi

319,552 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...