Voor Beehive II ben ik bezig met een soort generieke opzet voor animatie functionaliteiten in dhtml; zo heb ik voor een layer een "moveTo" gedefinieerd, maar ik wil geen "slideTo" definieren, omdat dat inhoudt dat ik voor alles wat je met css kan doen een animatie variant moet maken. Een setOpacity zou dan een fadeTo moeten krijgen, en zo krijg je een giga stamp code om alles wat er is te kunnen animeren, waarvan je het meerendeel toch nooit gebruikt.
Wat ik dus nu verzonnen heb is een "run" functie, en die kan je een moveTo, of een setOpacity of [enz] voeren, met een paar parameters:
Het probleem is alleen dat een moveTo 2 argumenten moet laten lopen, een clipTo zou er 4 moeten laten lopen, en een setOpacity maar 1tje. Het laten lopen van dat verschillende aantal params is niet zo'n probleem, maar die resultaten kan ik niet in 1 array naar de functie in kwestie sturen, want die gaat immers uit van losse ints. De resultaten moeten dus verdeeld worden en als losse params verstuurd, via een dynamische functie, alleen dat wisselt dus per type van de run. Nou zou dat vrij eenvoudig met eval kunnen, maar dat is vies
Wat ik nu heb bedacht is dit;
op basis van het aantal params wat moet lopen bak ik een string. Deze schrijft met tussengevoegde komma's gewoon a[0], a[1], a[2], enz achter elkaar, en dat plak ik in een functie, die in de init van de run wordt aangemaakt:
en vanuit de interval die de animatie stuurt:
Dat werkt dus op zich goed, alleen vraag ik me af of er geen andere manieren zijn om dynamisch functies te genereren die wisselende hoeveelheden params kunnen versturen, want ergens is dit toch nog wel een soort verkapte eval
Heeft iemand al eens iets dergelijks gedaan?
Wat ik dus nu verzonnen heb is een "run" functie, en die kan je een moveTo, of een setOpacity of [enz] voeren, met een paar parameters:
JavaScript:
1
2
3
| // voorbeeld dynObject.run('moveTo', {from:[20,20], to:[100,100], time;2000}); |
Het probleem is alleen dat een moveTo 2 argumenten moet laten lopen, een clipTo zou er 4 moeten laten lopen, en een setOpacity maar 1tje. Het laten lopen van dat verschillende aantal params is niet zo'n probleem, maar die resultaten kan ik niet in 1 array naar de functie in kwestie sturen, want die gaat immers uit van losse ints. De resultaten moeten dus verdeeld worden en als losse params verstuurd, via een dynamische functie, alleen dat wisselt dus per type van de run. Nou zou dat vrij eenvoudig met eval kunnen, maar dat is vies
Wat ik nu heb bedacht is dit;
op basis van het aantal params wat moet lopen bak ik een string. Deze schrijft met tussengevoegde komma's gewoon a[0], a[1], a[2], enz achter elkaar, en dat plak ik in een functie, die in de init van de run wordt aangemaakt:
JavaScript:
1
2
| // str == 'a[0], a[1], ...' this.action = new Function('scope', 'ref', 'a', 'scope[ref](' + str + ')'); |
en vanuit de interval die de animatie stuurt:
JavaScript:
1
2
3
| // res == [20, 30, ... ] (de lijst met lopende params op punt x) // scope == het object die de functie 'ref' heeft (dynObject of window) this.action(this.scope, this.ref, res); |
Dat werkt dus op zich goed, alleen vraag ik me af of er geen andere manieren zijn om dynamisch functies te genereren die wisselende hoeveelheden params kunnen versturen, want ergens is dit toch nog wel een soort verkapte eval
Heeft iemand al eens iets dergelijks gedaan?
Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin