Autor Zpráva
opicak
Profil
Zdarvím, mám script
//Konstanta
var TIMER = 20;

function Hide(id)
{
    var div = document.getElementById(id);
    div.style.overflow = 'hidden';
    clearInterval(timer);
    var timer = setInterval(function(){Fade(id)},TIMER);
}

function Fade(id,on)
{
    on = on==null?1:on;//jestliže není zadáná flag je nastavena na 1
    var div = document.getElementById(id);
    var heightdiv = div.offsetHeight;
    var value;
    if(on==1)
        {
            value = heightdiv  - 1;
        }
    else
        {
            value = heightdiv + 1;
        }
    div.style.height = value;
    if(value <= 1)
        {
            div.style.display = 'none';
            clearInterval(timer);
        }
}


a já bych potřeboval nějak udělat, že se mi při dalším kliknutí, div znovu zobrazí a dá se mu výška kterou měl nebo mu dát výšku alespoň podle obsahu divu.

Ještě bych se chtěl zeptat, jestli je proměnná timer deklarovaná i ve funkci Fade, a jak se zde dávají jíny syntaxe na kódy(aby nebyl kód jen jednou barvou).

Díky za všechny vaše nápady a připomínky, opicak.
_es
Profil
opicak:
Premenná timer je lokálna premenná funkcie Hide, preto pri spustení riadka 30 nastane chyba.

Je neefektívne neustále v časovači zisťovať objekt elementu z jeho id, do premennej si môžeš uložiť priamo objekt elementu.
opicak
Profil
Tohle si mi napsal(„element.timer =“
Neukladaj dáta takýmto spôsobom do HTML elementov.
) v jiné sekci, tak co to znamená?

Pochopil jsem to, tak že to nemám přiřazovat k elementu.

opicak
_es
Profil
opicak:
Pochopil jsem to, tak že to nemám přiřazovat k elementu.
No a čo to má spoločné so správnym použitím premenných?
Môžeš využiť nejakú premennú vo funkcii Hide, keďže funkcia predaná do setInterval je vnorená do funkcie Hide (definovaná v tej funkcii).
opicak
Profil
_es:
Premenná timer je lokálna premenná funkcie Hide, preto pri spustení riadka 30 nastane chyba.

Jak mám udělat, aby timer proměná platila pro obě funkce?

Je neefektívne neustále v časovači zisťovať objekt elementu z jeho id, do premennej si môžeš uložiť priamo objekt elementu.

Tak tohle jsem nepochopil. Můžeš mi to nějak vysvětlit, když tak přidej upravený script.

dík, opicak
_es
Profil
opicak:
„Je neefektívne neustále v časovači zisťovať objekt elementu z jeho id, do premennej si môžeš uložiť priamo objekt elementu.“
Tak tohle jsem nepochopil.
Že máš využiť premennú, ktorú si nazval div.

Můžeš mi to nějak vysvětlit, když tak přidej upravený script.
Nad tvojim chaotickým skriptom sa mi veľmi rozmýšľať nechce.
No základná schéma je jednoduchá:
function f(a, b, c,){
var d, e, f;
...
var t = setInterval(g, oneskorenie);
function g(){Kód funkcie využívajúci premenné a, b, c, d, e, f, t}
}
Witiko
Profil
opicak:
Jak mám udělat, aby timer proměná platila pro obě funkce?
Proměné jsou dostupné v aktuálním a všech podřazených jmenných prostorech. Pakliže chceš proměnnou dostupnou odevšat, definuj si ji jako globální pomocí klíčového slova var mimo funkci. Tak bude dostupná oběma podřazeným jmenným prostorům reprezentovaným těmi dvěma funkcemi.
_es
Profil
Witiko:
Pakliže chceš proměnnou dostupnou odevšat, definuj si ji jako globální pomocí klíčového slova var mimo funkci.
To však nevyhovuje tomu, na aký účel ju chce opicak použiť.
Ak by bola premenná timer globálna a ak by sa spustila nová animácia ešte pred skončením predchádzajúcej, tak by sa nedala tá skoršia animácia zastaviť a nová animácia by sa zastavila skôr.
opicak
Profil
_es:
No základná schéma je jednoduchá:

Tak jsem to zkusil podle té tvé funkce.
function Hide(id)
{
    var div = document.getElementById(id);
    div.style.overflow = 'hidden';
    clearInterval(timer);
    var timer = setInterval(Fade,20);
}

function Fade()
{
    var value = div.offsetHeight  - 1;
    div.style.height = value;
    if(value <= 1)
        {
            div.style.display = 'none';
            clearInterval(timer);
            if(clearInterval(timer))showalert();
        }
}
function showalert ()
{
    return alert("smazaný interval timer");
}

a firebug mě zastaví u 11 řádky value=undefined z toho usuzují že nezná proměnou div, buď jsem to blbě napsal já nebo ta tvá funkce je nesmysl. Nemůžeš z jedné funkce získat proměnné do druhé funkce.
_es
Profil
opicak:
Tak jsem to zkusil podle té tvé funkce.
Neskúsil, pozri si môj kód lepšie.
opicak
Profil
už jsem na to přišel udělal jsem si proměnou.
var vyska = div.scrollHeight

Vím že, když tam budu mít rolování, tak to zas bude dělat trochu něco jiného, ale jestli někdo znáte lepší způsob, tak ho sem napište.

opicak

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