Avatar billede razmuz_dk Nybegynder
31. oktober 2002 - 17:05 Der er 8 kommentarer og
1 løsning

fadeout-script

Jeg har lavet et lille script:

timeouts = Array();

function hide(obj,waittime) {
clearTimeout(timeouts["hiding"+obj]);
document.all[obj].style.visibility='visible';
document.all[obj].style.filter = 'alpha(opacity=100)';
timeouts["hiding"+obj] = setTimeout("fadeout('"+obj+"')",waittime);
}

function fadeout(obj) {
for(i=1;10>=i;i++) {
opacity = (100-(i*10));
timeout = 100*i;
timeouts["hiding"+obj] = setTimeout("document.all['"+obj+"'].style.filter = 'alpha(opacity="+opacity+")';",timeout);
}
timeouts["hiding"+obj] = setTimeout("hiding['"+obj+"']='no';document.all['"+obj+"'].style.visibility = 'hidden';document.all['"+obj+"'].style.filter = 'alpha(opacity=100)'",1000);
}

Meningen med det er at et objekt skal fade ud efter "waittime" millisekunder hver gang "hide()" køres. Hvis hide kører på et bestemt objekt, og det skal hides igen (uden at "fadeout()'en er kørt" endnu), så skal processen starte forfra og man skal vente waittime millisekunder igen. Derfor "clearTimeout()" i "hide()".

Mit problemet er at når jeg clearer timeout'en "timeouts["hiding"+obj]" der er i "fadeout()" FRA funktionen "hide()" så reagerer den ikke. Den clearer kun timesouts fra hide().

Kort sagt: clearTimeout() virker ikke på timeouts der kørt i en anden funktion end den clearTimeout() køres fra. hvorfor det? :(

Håber i forstår- det er lidt komplekst :-)

\\-> RAZ
Avatar billede Slettet bruger
31. oktober 2002 - 17:19 #1
Fordi det er en såkaldt lokal variabel. Prøv at sætte "var" foran hver timeout sætning, fx:

var timeouts["hiding"+obj] = setTimeout("fadeout('"+obj+"')",waittime);
Avatar billede Slettet bruger
31. oktober 2002 - 17:20 #2
Næ, timeouts er jo defineret uden for en funktion... Hm, prøv lige at ændre linjen til dette:

timeouts = new Array();
Avatar billede razmuz_dk Nybegynder
31. oktober 2002 - 18:42 #3
Det har jeg prøvet - det virker ikke :(
Avatar billede Slettet bruger
31. oktober 2002 - 20:36 #4
Det her er da vist helt forkert:

setTimeout("hiding['"+obj+"']='no' ...

Det må være:

setTimeout("timeouts['hiding"+obj+"']='no' ...
Avatar billede razmuz_dk Nybegynder
31. oktober 2002 - 21:06 #5
Ehm - det har da overhovedet ikke noget med problemet at gøre? - HVAD den gør kan være ligemeget - Det er OM den gør .. :)

eller hva?
Avatar billede Slettet bruger
01. november 2002 - 15:35 #6
Jeg forstår ikke helt din sidste kommentar. Efter min mening bør alle fejl i et script rettes, og jeg ser helt klart ovenstående som en fejl.
Avatar billede razmuz_dk Nybegynder
01. november 2002 - 16:07 #7
Nå ok - det er det rent faktisk ikke :) hiding'".obj+"'] SKAL indeholde 'no'. Fadeout'en virker fint som helhed. Problemet er at den ikke vil resette "udfadingen" når hide() køres.
Avatar billede Slettet bruger
01. november 2002 - 16:11 #8
Jeg kan bare ikke se noget sted, hvor du definerer hiding.

Må jeg ikke få et link? Det gør det nemmere at eksperimentere.
Avatar billede razmuz_dk Nybegynder
02. november 2002 - 01:18 #9
Jeg lukker og slukker her :-)
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

IT-JOB

Forsvarets Efterretningstjeneste

Linux Infrastructure Specialist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Driftsstærk IT-profil til Forsvarsministeriets Materiel- og Indkøbsstyrelse

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer