Ik weet niet precies hoe ik mn verhaal duidelijk moet maken, maar hoop dat met de tekst hieronder wat te doen is 
In de database heb ik een treemenu staan die ik natuurlijk als html output richting de gebruiker wil gooien. Nu moet dat menu submenu's kunnen bevatten of moet er een bewerking middels een event op plaats gaan vinden (zoals een fade oid). Ik kan dat op twee manieren doen. Ik maak in javascript een object die mn menu en menuitems kan bevatten en creeër renderfunctionaliteit die mn menu gaat weergeven met daaraan al mn mouseovers, mouseouts en onclicks. Maar dat wil ik niet. De zoekmachine heeft voor zover ik weet moeite met menu's in javascript die dynamisch gerenderd wordt. Dus wil ik het volgende: ik render in mn webpagina serverside mn menu in html zonder event attributen. Waarom niet? Stel ik wil een tree van 1 level diep presenteren en op elk menuitem wil ik een fade in en out zetten, dan wil ik wel dat ze a-synchroon werken. Ze moeten niets met elkaar van doen hebben. Om dat te bereiken zal ik eigenlijk voor elk menuitem waardes als de opacity op dat moment moeten bijhouden, een eigen timer geven etc etc. Nu had ik daarvoor het volgende idee. Ik genereer serverside zoals ik eerder zei mn html zodat de zoekmachine goed door mn website heen kan wandelen en ik zorg dat clientside mn hele menustructuur in een javascript object is opgeslagen. Ik gebruik onderstaande class om clientside mn menu hiërarchisch in op te slaan.
Nu had ik het idee dus om middels een initialize function in een lusje een functie voor de verschillende events aan de html objecten (mn serverside gegenereerde html) te koppelen.
Op deze manier hoopte ik in mn Fader functie gebruik te kunnen maken van this.timer zodat ik altijd een unieke timer bij kon houden per menuitem, per menuitem mn fade snelheid in te stellen etc etc... Maar helaas dit ging mij om de een of andere manier niet lukken. Met een work arround (lees: een hele andere manier dan dat ik wilde) heb ik een werkende versie gekregen (staat hier). Maar omdat ik met die workarround eigenlijk niet bereikt heb wat ik voor ogen heb, ben ik benieuwd of iemand mij uit de brand kan helpen! De manier van werken lijkt me veel mogelijkheden geven en hoop dat men mij meer tips e.d. kan geven over het gebruik van timers in zulke gevallen en het attachen van events!
In de database heb ik een treemenu staan die ik natuurlijk als html output richting de gebruiker wil gooien. Nu moet dat menu submenu's kunnen bevatten of moet er een bewerking middels een event op plaats gaan vinden (zoals een fade oid). Ik kan dat op twee manieren doen. Ik maak in javascript een object die mn menu en menuitems kan bevatten en creeër renderfunctionaliteit die mn menu gaat weergeven met daaraan al mn mouseovers, mouseouts en onclicks. Maar dat wil ik niet. De zoekmachine heeft voor zover ik weet moeite met menu's in javascript die dynamisch gerenderd wordt. Dus wil ik het volgende: ik render in mn webpagina serverside mn menu in html zonder event attributen. Waarom niet? Stel ik wil een tree van 1 level diep presenteren en op elk menuitem wil ik een fade in en out zetten, dan wil ik wel dat ze a-synchroon werken. Ze moeten niets met elkaar van doen hebben. Om dat te bereiken zal ik eigenlijk voor elk menuitem waardes als de opacity op dat moment moeten bijhouden, een eigen timer geven etc etc. Nu had ik daarvoor het volgende idee. Ik genereer serverside zoals ik eerder zei mn html zodat de zoekmachine goed door mn website heen kan wandelen en ik zorg dat clientside mn hele menustructuur in een javascript object is opgeslagen. Ik gebruik onderstaande class om clientside mn menu hiërarchisch in op te slaan.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| function MenuItem (id, name) { this.id = id; this.name = name; this.children = new Array(); this.opacity = null; this.opacitystart = null; this.opacityend = null; this.opacitystep = null; this.opacityspeed = null; this.outfaded = null; this.timer = null; this.SetOpacityValues = function (opacitystart, opacityend, opacitystep, opacityspeed) { this.opacity = opacitystart; this.opacitystart = opacitystart; this.opacityend = opacityend; this.opacitystep = opacitystep; this.opacityspeed = opacityspeed; this.outfaded = false; } this.AddChild = function (menuitem) { this.children[this.children.length] = menuitem; } this.Fader = function () { alert ('hij fade :-)'); } } |
Nu had ik het idee dus om middels een initialize function in een lusje een functie voor de verschillende events aan de html objecten (mn serverside gegenereerde html) te koppelen.
JavaScript:
1
2
3
4
5
| for (var i = 0; i < this.menuitems.children.length; i++) { document.getElementById(this.menuitems.children[i].id).onmouseover = this.menuitems.children[i].Fader; document.getElementById(this.menuitems.children[i].id).onmouseout = this.menuitems.children[i].Fader; } |
Op deze manier hoopte ik in mn Fader functie gebruik te kunnen maken van this.timer zodat ik altijd een unieke timer bij kon houden per menuitem, per menuitem mn fade snelheid in te stellen etc etc... Maar helaas dit ging mij om de een of andere manier niet lukken. Met een work arround (lees: een hele andere manier dan dat ik wilde) heb ik een werkende versie gekregen (staat hier). Maar omdat ik met die workarround eigenlijk niet bereikt heb wat ik voor ogen heb, ben ik benieuwd of iemand mij uit de brand kan helpen! De manier van werken lijkt me veel mogelijkheden geven en hoop dat men mij meer tips e.d. kan geven over het gebruik van timers in zulke gevallen en het attachen van events!