Ik heb een menu gemaakt wat standaard helemaal uitgeklapt is en wat na een trigger in de body-onload inklapt doordat de hoogte van iedere LI zo wordt aangepast dat alleen het root element zichtbaar is. Vervolgens kun je door op een plusje te klikken het menu weer uitklappen waarbij je het menu er uit ziet schuiven. Dit laatste effect doe ik met deze functie:
li = het LI element, en maxHeight de hoogte die hij moet hebben als hij uitgeklapt is. (die andere 2 variabelen wilde ik gebruiken om speed mee aan te passen zodat het niet lineair gebeurt, maar dat doet nu niet ter zake). Wat het in feite dus doet is de hoogte van het li element weer zo aanpassen dat alle subelement zichtbaar zijn.
Opzich werkt dit goed, behalve dat het veel te traag gaat. Zelfs als ik de timeout op 0 zet, dan gaat het nog te traag. het zetten van de timeout kost kennelijk veel meer tijd dan de timeout zelf.
Als ik ipv die IF een WHILE loop maak met dezelfde conditie en die setTimeout er uit gooi, dan zie je weer niets van het effect en klapt ie voor het oog in 1x uit (ipv 'sliden'). Ik heb verder nog geprobeerd om in die while loop een vertraging in te bouwen:
- dmv wederom een setTimeout
- dmv een loopje die na een bepaald aantal miliseconde weer afbreekt
maar beide oplossingen zorgen ervoor dat er heel even niets gebeurd en het menu dan ineens in 1x uitklapt; de browser hertekent het beeld dus niet tijdens die pauzes.
Iemand bekend met dit probleem? En een idee voor een andere aanpak?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function slideOut(li, orgHeight, curHeight, maxHeight) { var speed = 10; if (parseInt(curHeight) < parseInt(maxHeight)) { curHeight += 2; li.style.height = curHeight+'px'; setTimeout(function() { slideOut(li, orgHeight, curHeight, maxHeight); }, speed); } else { li.style.height = 'auto'; } } |
li = het LI element, en maxHeight de hoogte die hij moet hebben als hij uitgeklapt is. (die andere 2 variabelen wilde ik gebruiken om speed mee aan te passen zodat het niet lineair gebeurt, maar dat doet nu niet ter zake). Wat het in feite dus doet is de hoogte van het li element weer zo aanpassen dat alle subelement zichtbaar zijn.
Opzich werkt dit goed, behalve dat het veel te traag gaat. Zelfs als ik de timeout op 0 zet, dan gaat het nog te traag. het zetten van de timeout kost kennelijk veel meer tijd dan de timeout zelf.
Als ik ipv die IF een WHILE loop maak met dezelfde conditie en die setTimeout er uit gooi, dan zie je weer niets van het effect en klapt ie voor het oog in 1x uit (ipv 'sliden'). Ik heb verder nog geprobeerd om in die while loop een vertraging in te bouwen:
- dmv wederom een setTimeout
- dmv een loopje die na een bepaald aantal miliseconde weer afbreekt
maar beide oplossingen zorgen ervoor dat er heel even niets gebeurd en het menu dan ineens in 1x uitklapt; de browser hertekent het beeld dus niet tijdens die pauzes.
Iemand bekend met dit probleem? En een idee voor een andere aanpak?