Autor Zpráva
skrytí
Profil *
Dobrý den,

když si zobrazím a zkopíruju zdroj prvního způsobu animovaného skrytí obsahu na této stránce, tedy

  <div class="nezmenseny">
  <style>
    .zmenseni p.zmensit {max-height: 2em; overflow: hidden; transition: max-height 1s}
    .zmenseny p.zmensit {max-height: 0}
  </style>
  <button onclick="prohodit(this.parentNode, 'zmenseny')">Zobrazit/skrýt změnou výšky</button>
    <p>Odstavec, který se nezmenší.</p>
  <p class="zmensit">Obsah plynule skrývaný.</p>
    <p>Odstavec, který se také nezmenší.</p>
  </div>

skrytí obsahu po kliku na tlačítko mi nefunguje.

Mohu poprosit o kompletní kód, u nějž by stačilo jej zkopírovat?
Tomášeek
Profil
skrytí:
Mohu poprosit o kompletní kód, u nějž by stačilo jej zkopírovat?
Kód, který lze zkopírovat, máš přímo na odkázaném webu. Tam ukázka evidentně funguje. Snaž se tedy pochopit, co děláš špatně.
lionel messi
Profil
skrytí:
skrytí obsahu po kliku na tlačítko mi nefunguje.

Lebo v úryvku nie je definovaná JS funkcia prohodit. Do kódu si doplň:

<script>
function prohodit(element, trida) {
    element.className = element.className == trida ? "" : trida;
}
</script>
RastyAmateur
Profil
Tomášeek:
Na jeho obranu, v té ukázce opravdu není definovaná funkce prohodit. Navíc tento způsob řešení mi nepřijde úplně v pohodě.

skrytí:
Od jQuery si můžeš vybrat i typ té animace: toggle, fadetoggle, slidetoggle. V examplech toho máš dost, kopíruj si.
Tomášeek
Profil
RastyAmateur:
v té ukázce opravdu není definovaná funkce prohodit.
Je ve zdrojáku.

Navíc tento způsob řešení mi nepřijde úplně v pohodě.
Tak ono na tom nic špatného není, co se ti nezdá? Závislost na JS je stejně jako u tvého řešení, navíc netahám obrovský framework. Toggle (plynulé skrytí/odkrytí) i fade (změna opacity) jde dnes pohodlně a plynule docílit i v CSS.
RastyAmateur
Profil
Tomášeek:
Ale ne v té části, kterou autor zveřejnil. Být začátečník, také se divím, že to najednou nefunguje...

Přijde mi divné, že to ovlivňuje jen nějaký odstavec uvnitř rodičovského elementu daného tlačítka. Raději bych to dělal tak, že se třeba té funkci dá i nějaký název třídy nebo selektor. Animace jde snadno udělat i bez jQuery, jak říkáš, ale opět si myslím, že když tazatel nedokáže takovou věc napsat ani najít sám, bude pro něj jednodušší tu knihovnu použít. Jde to s ní snadno a i ten kód je krátký, čitelný.
skrytí
Profil *
lionel messi:
Díky, ale pořád dělám něco špatně, viz živá ukázka. Mohu poprosit o kompletní kód?
RastyAmateur
Profil
skrytí:
živá ukázka
Naimplementovat to do kódu už to zvládneš sám? Nebo nemáme udělat za tebe i to?
Alespoň jsi ten kód projdi a zkus ho pochopit, ať z toho alespoň něco máš.
Tomášeek
Profil
RastyAmateur:
opět si myslím, že když tazatel nedokáže takovou věc napsat ani najít sám, bude pro něj jednodušší tu knihovnu použít.
Eh? V čem je to snažší, než v CSS přidat transition: xxx;? Navíc ta transition už přímo v ukázce je.

Jde to s ní snadno a i ten kód je krátký, čitelný.
Nicméně to neřeší to, že se začátečník nenaučí kódovat, nýbrž bastlit.
RastyAmateur
Profil
Tomášeek:
U fadeToggle třeba v tom, že pomocí CSSek sice udělá jednoduchou animaci, ale ten element to jen zneviditelní, neskryje. Zůstane tam po ní na první pohled prázdné místo.
U slideToggle třeba v tom, že je těžké to hezky nastavit na element s neznámou výškou.
Obecně to, že s jQuery je to jeden jediný řádek kódu, zatímco normálně musíš vytvořit jednu (a více) CSS třídu, které se nastaví potřebná CSS vlastnosti a do toho ještě nějaký JS kód, který se bude starat o to, jestli dané elementy ty třídy mají. Když bych vzal ukázku od [#3] lionel messi, tak pak se třeba musí ještě postarat o případy, kdy má element více tříd a on chce měnit jen jednu.

Jako já s tebou souhlasím, že to jde udělat podle CSSek, že to není moc složité a že je to mnohem efektivnější. Ale tvrdím to, že pro začátečníka je jQuery naprosto super, může to použít i jinde než jen v jednom případě, je to snadno čitelné, má to super dokumentaci, a podobně.
Kryton
Profil *
No díky za užitečné informace dlouho sem si s tím lámal hlavu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0