Autor Zpráva
Step
Profil
Potřeboval bych pomoc s rozbalovacim menu v Javascriptu a to neni uplně moje parketa. Dělá mi to 2 chyby:
1) Nejde sjet do toho podmenu co se rozbali, prostě se pustí onMouseOut
2) Když to nenechám uplně sbalit a zase to začnu rozbalovat(zběsile jezdim myší na/pryč z toho <li>), tak to začne dělat strašný věci.
Dělá to proto že se změní height. kterou si vytahuju při každym volání na 0px a už to nic nezmění zpátky.


U <li> mám onMouseOver které mi volá funkci

function rozvin(idecko)
{
var id = parseInt(idecko);
var  odkaz = document.getElementById(id + "odkaz");
odkaz.className= "active";
var div = document.getElementById(idecko);
var elem = div.firstChild;
var v = document.defaultView.getComputedStyle(elem,"").height;
if(elem.style.display = "none")
{
elem.style.display = "";
}
v = parseInt(v);
if(elem.style.visibility == "hidden")
{
elem.style.height = "0px";
elem.style.visibility = "visible";
elem.timeout = window.setInterval(function(){rolout(elem, v)}, 20);
}
}

function rolout(elem, v)
{
var c = document.defaultView.getComputedStyle(elem,"").height
c = parseInt(c);
d = c;
if(d < v/5)
{
d = v/5;
}
var plus = v - d;
plus = Math.sqrt(plus);
plus = parseInt(plus);

if(c == 0)
{
elem.style.height = "20px";
}
else
{
elem.style.height = c + plus + "px";
}
if(c >= v)
{
clearInterval(elem.timeout);
d = 0;
c = 0;
plus = 0;
}
}


a potom je u toho <li> ještě onMouseOut, volá funkci


function svin(idecko){

var div = document.getElementById(idecko);
var elem = div.firstChild;
//window.alert(elem.timeout);
var v = document.defaultView.getComputedStyle(elem,"").height;
v = parseInt(v);
elem.t = setInterval(function(){rollin(elem, v)}, 15);
var id = parseInt(idecko);
var  odkaz = document.getElementById(id + "odkaz");
odkaz.className= "";

}

function rollin(elem, v)
{
var c = document.defaultView.getComputedStyle(elem,"").height;
c = parseInt(c);
var d = c;
if(d > v/5)
{
d = v/2 + v/3;
}
var plus = v - d;
//plus = Math.sqrt(plus);
plus = parseInt(plus);

if(c < 20 || plus > c)
{
clearInterval(elem.t);
elem.style.height = v + "px";
elem.style.visibility = "hidden";
elem.style.overflow="hidden";
d = 0;
c = 0;
plus = 0;
}
else if(c != 0)
{
elem.style.height = c - plus + "px";
}
}


Tady ještě html
<div class="podmenu"><ul><li id="2odkaz"  onMouseOver="rozvin('2roleta');">
<a  onMouseOut="svin('2roleta');" //tohle jsem zkoušel dát všude možně ale pořád mi to nefunguje//
  href='http://hydrotechnik.vyvoj.investck.cz/hydrotechnik_info/o_spolecnosti/'>O společnosti</a><div id="2roleta" class="podpodmenu"><ul style="overflow:hidden; visibility:hidden;"><li class="zakulaceni_horni"></li><li class="zakulaceni_dolni"></li></ul></div>

Výsledek je zde

ten druhej problém bych asi byl schopnej nějak pořešit ale s tim prvnim si vubec nevim rady. Předem děkuju za radu.
Camo
Profil
Step:
if(elem.style.display = "none")

????
No a musíš to menu robiť takýmto brutálnym spôsobom???
Step
Profil
To určitě nebylo schválně, už jsem to opravil, díky za upozornění, ale problém to neřeší.
Camo
Profil
To je jasné, že to problém nerieši, ale problém je aj to, že ten kód je čo sa týka vysúvacieho menu nehorázny a pýtam sa či to tak musí byť, lebo ak nie, tak by bolo lepšie riešiť to jednoduchšie. Taký kód dosť odradzuje.
Step
Profil
Samozřejmě že to nemusí být takhle prasácky napsaný, problém je v tom že v js toho zrovna moc neumim a tohle je asi tak nejlepší co umim stvořit;-)

Nemůže být problém v tom, že když dám nějakýmu prvku onMouseOver/out tak to zdědí všechny prvky co jsou pod nim (jeho děti nebo jak se tomu nadává)?
Leo
Profil
Pokud se z robalovaciho menu nechcete zblaznit, tak podmenu (at uz je to cokoliv) musi byt v html potomkem (zanorene do) elementu, na nemz detekujete onmouseout a over. Z cehoz plyne, ze to nemuze byt na odkazu. Leo
Camo
Profil
No a ďalšia otázka, keď už to nemusí byť tak preexponované:
Nestačil by miesto rolovania skrývanie/odkrývanie?
Step
Profil
Asi bude muset stačit skývání/odkrývání, prostě jsem chtěl zkusit udělat postupný rozbalování. Přijde mi dobrý se to učit js něčem použitelnym.
Camo
Profil
Snáď ti pomôže toto.

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: