| 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: 16 let
|
|||
0