Autor | Zpráva | ||
---|---|---|---|
Step Profil |
#1 · Zasláno: 8. 11. 2009, 20:19:24 · Upravil/a: Step
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 |
#2 · Zasláno: 9. 11. 2009, 23:47:18 · Upravil/a: Camo
Step:
if(elem.style.display = "none") ???? No a musíš to menu robiť takýmto brutálnym spôsobom??? |
||
Step Profil |
#3 · Zasláno: 10. 11. 2009, 07:05:11
To určitě nebylo schválně, už jsem to opravil, díky za upozornění, ale problém to neřeší.
|
||
Camo Profil |
#4 · Zasláno: 10. 11. 2009, 20:51:54
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 |
#5 · Zasláno: 10. 11. 2009, 21:35:37
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 |
#6 · Zasláno: 10. 11. 2009, 22:42:59
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 |
#7 · Zasláno: 10. 11. 2009, 22:53:30
No a ďalšia otázka, keď už to nemusí byť tak preexponované:
Nestačil by miesto rolovania skrývanie/odkrývanie? |
||
Step Profil |
#8 · Zasláno: 11. 11. 2009, 15:16:14
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 |
#9 · Zasláno: 11. 11. 2009, 16:51:15
Snáď ti pomôže toto.
|
||
Časová prodleva: 14 let
|
0