Avatar billede mailand Nybegynder
17. oktober 2005 - 15:46 Der er 6 kommentarer

kald til samme objekt?

Hej

Jeg forsøger mig med noget oop js, men løber ind i en lidt spøjs fejl...

window.onload = function(){
    oAniObj1 = new Animation(aTimelineCloud3, 0);
    oAniObj1.AnimationHandler();
}

function Animation(aTimeline, iCurrentStep){
    var iFrameTime = 40;
    this.Timeline = aTimeline;
    this.CurrentStep = iCurrentStep || 0;
    this.AnimationHandler = AnimationHandler;
   
    function AnimationHandler (){
        // does array of steps exist at all?
        if(this.Timeline){
            if(this.CurrentStep < this.Timeline.length){
                // run this step's action
                eval(this.Timeline[this.CurrentStep].action);
               
                // is a specific frame time set?
                if(this.Timeline[this.CurrentStep].time){
                    iFrameTime = parseInt(this.Timeline[this.CurrentStep].time)
                }
               
                // go to next step
                this.CurrentStep++;
               
                // setup next animation run
                setTimeout(eval("this.AnimationHandler()"), iFrameTime);
            }
        }
    }
}


- en funktion, der skal udføre de handlinger, der ligger i et vilkårligt array.

Jeg har det til at køre, hvor der ligger 3 ting i arrayet aTimelineCloud3 - og det fungerer fint... men problemet er, den ikke stopper, når den når til sidste post i arrayet.... Firefox giver denne fejl:
Fejl: useless setTimeout call(missing quotes around argument?)

Er der nogen, der har et bud...

Jeg har ikke lavet noget oop js før på den her måde, så hvis der er umiddelbare begynderfejl, så beklager jeg... men tanken er, jeg skal have x antal af disse Animation() objekter kørende baseret på deres eget timeline array...

- Mailand
Avatar billede horsmark Nybegynder
17. oktober 2005 - 16:12 #1
prøv dette:

window.onload = function(){
    oAniObj1 = new Animation(aTimelineCloud3, 0);
    oAniObj1.AnimationHandler();
}

function Animation(aTimeline, iCurrentStep){
    var iFrameTime = 40;
    this.Timeline = aTimeline;
    this.CurrentStep = iCurrentStep || 0;
    this.AnimationHandler = AnimationHandler;
}

Animation.prototype.AnimationHandler = function (){
    // does array of steps exist at all?
    if(this.Timeline){
        if(this.CurrentStep < this.Timeline.length){
            // run this step's action
            eval(this.Timeline[this.CurrentStep].action);
         
            // is a specific frame time set?
            if(this.Timeline[this.CurrentStep].time){
                iFrameTime = parseInt(this.Timeline[this.CurrentStep].time)
            }
         
            // go to next step
            this.CurrentStep++;
         
            // setup next animation run
            var Animation = this
            var timerfunc = function () { Animation.AnimationHandler() }
            setTimeout( timerfunc, iFrameTime);
        }
    }
}

læs mere om prototypes her:
http://www.javascriptkit.com/javatutors/proto.shtml eller
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsproprototype.asp
Avatar billede horsmark Nybegynder
17. oktober 2005 - 16:13 #2
denne skulle lige være fjernet, da det er hele meningen med prototype handling
    this.AnimationHandler = AnimationHandler; <--- skal slettes fra din constructor
Avatar billede mailand Nybegynder
17. oktober 2005 - 16:21 #3
ahh. cool nok - det virker skam...

- men hvis jeg sletter linien:
this.AnimationHandler = AnimationHandler;

så får jeg en fejl, når jeg kører siden:
oAniObj1.AnimationHandler is not a function
med reference til linien:
oAniObj1.AnimationHandler();

Hvordan får jeg så startet tingene, hvis jeg sletter den linie i constructoren?

- Mailand
Avatar billede mailand Nybegynder
17. oktober 2005 - 16:23 #4
den fejler stadigvæk i explorer...  :-(
this.Timeline[...].action is null or not an object
Avatar billede mailand Nybegynder
17. oktober 2005 - 16:25 #5
den kører de tre poster igennem, der ligger i arrayet, og fejler så...
Avatar billede horsmark Nybegynder
17. oktober 2005 - 23:38 #6
var oAniObj1 = new Animation(aTimelineCloud3, 0);
window.onload = function(){
    oAniObj1.AnimationHandler();
}

måske sådan ? Kan være setTimeout ikke kan fange "objectet" hvis der er lokalt erklæret ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester