Avatar billede Slettet bruger
05. marts 2008 - 17:00 Der er 5 kommentarer og
1 løsning

Vent- og fortsæt script

Hej eksperter.

Jeg har lavet et ultrasimpelt script. Hensigten er at når kommandoen "ventvenligst(8);" køres, venter tidslinien 8 sekunder, før den fortsætter.
Problemet er, at clearInterval tilsyneladende ikke virker. Jo flere gange, funktionen kaldes, jo flere intervaller sættes der... og til sidst er der så mange at ventefunktionen reelt set er uden virkning.


function ventvenligst(antalsekunder) {
    stop();
    if (ventetid) {

        clearInterval(ventetid);
    }
    var ventetid:Number = setInterval(this, "afspil", antalsekunder*1000);
}
function afspil() {
    play();
    trace(getTimer()/1000);
}

Hvad gør jeg forkert, monstro?
Avatar billede maqhem Nybegynder
05. marts 2008 - 17:13 #1
function ventvenligst(antalsekunder:Number):Void {
    stop();
    var itv:Number = setInterval(afspil, antalsekunder * 1000);
    function afspil():Void {
        clearInterval(itv);
        play();
    }
}
Avatar billede maqhem Nybegynder
05. marts 2008 - 17:18 #2
Eller kortere endnu:

function ventvenligst(antalsekunder:Number):Void {
    stop();
    var itv:Number = setInterval(function() {clearInterval(itv); play();}, antalsekunder * 1000);
}
Avatar billede Slettet bruger
05. marts 2008 - 20:01 #3
Jamen det er jo verdensklasse - point venter...

Har du mulighed for, i samme ombæring, lige at forklare, hvorfor "afspil"-funktionen ikke virker, hvis den ligger udenfor "ventvenligst"-funktionen?
Avatar billede maqhem Nybegynder
05. marts 2008 - 20:37 #4
Det skulle den også meget gerne gøre - MEN variablen itv (intervallet) er jo oprettet i ventvenligst, og derfor er variablen lokal og kan KUN findes i denne funktion. Så når man forsøger at bruge clearInterval på variablen itv i en anden funktion, duer det ikke, fordi variablen ikke er tilgængelig i denne funktion. Hvis du meget gerne vil have funktionen afspil defineret uden for funktionen, kan det faktisk løses nemt på én af to måder:

1:
------
// Variablen er nu oprettet uden for funktionen ventvenligst, og er ikke længere en lokal variabel
var itv:Number;
function ventvenligst(antalsekunder:Number):Void {
    stop();
    itv = setInterval(afspil, antalsekunder * 1000);
}
function afspil():Void {
    clearInterval(itv);
    play();
}
------

2:
------
function ventvenligst(antalsekunder:Number):Void {
    stop();
    // Nu oprettes variablen i stedet som en global variablen, der kan tilgås fra alle funktioner, movieclips etc.
    _global.itv = setInterval(afspil, antalsekunder * 1000);
}
function afspil():Void {
    clearInterval(_global.itv);
    delete _global.itv;
    play();
}
------

Eller du kan lave en lidt kluntet metode, hvis du ikke ønsker en variabel, der må være tilgængelig fra andre steder end funktionen, der opretter den:

------
function ventvenligst(antalsekunder:Number):Void {
    stop();
    var itv:Number = setInterval(function() {clearInterval(itv); afspil();}, antalsekunder * 1000);
}
function afspil():Void {
    play();
}
------

... som faktisk svarer til...

------
function ventvenligst(antalsekunder:Number):Void {
    stop();
    var itv:Number = setInterval(tempclear, antalsekunder * 1000);
    function tempclear():Void {
        clearInterval(itv);
        afspil();
    }
}
function afspil():Void {
    play();
}
------

Men så er du ikke sluppet ret elegant fra det, vil jeg sige.
Avatar billede maqhem Nybegynder
05. marts 2008 - 21:56 #5
Og så lige et svar.
Avatar billede Slettet bruger
06. marts 2008 - 00:37 #6
Perfekt. Tusind tak for forklaringen :) Hermed point...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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