Autor Zpráva
Kcko
Profil
Ahoj, něco zkouším (něco složitějšího) a vytvořil jsem na ukázku demo s několika vrstvami, kdy po kliku na tlačítko se pustí animace pro 1 blok, další tlačítko animace pro 1 a 2 blok atd.

Demo: lab.rjwebdesign.cz/jquery-anim

Funguje to, ale nepřijde mi správně, že by se to takhle mělo dělat. Koukal jsem na fronty (queue), ale moc tomu nerozumím.

Dá se to zapsat nějak lépe / správněji? S využitím dostupných věcí v jQuery? Budu mít těchto animací 1-n, (HTML vrstev taky) a potřebuji aby to jelo sekvenčně a napojovalo se to na sebe vždy tak, až se dokončí předchozí animace, tak na ní naskočí další.

Tak jak to ted mám, tak je to funkční, ale znovu opakuji, že si myslím, že to není dobře a mohlo by se teoreticky stát, že by do sebe animace mohly "narazit" a pak by to rolování bylo trhané nebo ne takové jaké by být mělo.

PS. Po kliku na button je nutno si stránku obnovit, zajíždění jsem neimplementoval, to není podstatou věci.

Díky za každý názor nebo popostrčení.


Už jsem se propracoval k tomu, že stačí ty funkce A/B/C volat jako slib, tj


var c = function()
{
    return $('#c').animate({
        'margin-top': 0
        }, 600
    ).promise();

    console.log('C');
  

};

a poté


c().then(b).then(a); ale to stejně není automatika a pořád to píšu ručně.
Keeehi
Profil
Abych to správně pochopil. Uživatel vyvolá nějakou akci, v tu chvíli se začne vykonávat nějaká animace. V průběhu té animace vyvolá uživatel nějakou další akci na kterou by se měla spustit další animace, ale ty chceš začátek té druhé animace odložit až na dokončení první animace. Je to tak?
Nebo na jednu akci chceš spustit více postupných animací, jen je nechceš vypisovat do kódu ručně.

Jde mi o to, zda ve chvíli když je vykonána nějaká akce jsou známé všechny animace, které se mají vyvolat nebo ne.
Kcko
Profil
Keeehi:
Chtěl jsem obojí. Nicméně moje doplnění viz promises (when, then ...) by nefungovalo dobře, protoze by se stránkou nerolovalo plynule. Už jsem si to vyzkoušel a je tam ten delay vidět (čeká se na dokončení předchozího slibu).

Chtěl jsem tedy animace spustit po sobe, což už example dělá, samozřejmě si to umím pustit v cyklu
pseudokód
var animace = [a, b, c];
iterace (
 animace-$();
)

Já si vlastně akorát nejsem jistý, jestli při volání, které mám v demu, nedojde k problému, že by se nějaká animace vykonala třeba současně s ukončováním první, ale neděje se tak.
Asi jsem to chtěl napsat trošku sofistikovaněji (pomocí nějakých jQuery front, ale nepřišel jsem až na zmíněné PROMISES jak na to a s nimi to nefunguje tak jak jsem myslel, že bude a ani to neumím zautomatizovat), takže viz můj demo příklad + pseudokód je asi řešení, pokud samozřejmě nevíš o něčem lepším / více programovějším.

Ještě tedy demo 2 s promises lab.rjwebdesign.cz/jquery-anim/index2.php
Keeehi
Profil
Kcko:
Bohužel ani z tohoto příspěvku jsem nepochopil, jaký problém řešíš. Nejpravděpodobnější se mi zdá, že ti vše sice funguje, ale hledáš nějaký hezčí nebo univerzálnější zápis kódu. Pak se můžeme bavit, jak to danou funkcionalitu lépe zapsat. Nebo máš reálný problém, že ti něco nefunguje. pak je ale potřeba vyrobit ukázku kde to nefunguje, popsat postup co má člověk udělat, aby tu nefunkčnost vyvolal a popsat, jak by se to mělo správně chovat.
Kcko
Profil
Keeehi:
Nevadí, početl jsem si o animacich v jquery, frontách, sekvenčních spouštění atd a už je mi to docela jasné.
A to posouvaní vyřeším jen 1 animací na 1 rodičovském elementu, nikoli X animacemi na X podelementech.

Dík za zájem.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0