Avatar billede netro Nybegynder
02. februar 2005 - 04:01 Der er 9 kommentarer og
1 løsning

Lille rekursiv funktion tager for lang tid

Jeg har lavet denne lille funktion, som jeg vil bruge til at fade en div ("translag"). Hver gang den kaldes, sættes transparensen til 1 mindre for til sidst at ende ved 0, hvor en ny side kaldes. Rent teoretisk burde det hele ikke tage meget mere end 100ms, men i praksis tager det 8-10 sekunder. Det kan vel næppe være den smule kode, der tager så lang tid at afvikle?


function fade(Pct) {
    if(Pct==0)
    {
        lok=top.location.href;
        top.location.href=lok.substring(0, lok.indexOf("default.asp"));
    }
    else
    {
        document.getElementById("translag").style.filter="Alpha(Opacity="+Pct+")";
        nyPct=Pct-1;   
        setTimeout("fade(nyPct);", 1);
    }   
}
Avatar billede roenving Novice
02. februar 2005 - 04:16 #1
For det første vil den type kode jo kun virke, hvis din besøgende tilfældigvis bruger Internet Explorer, for det andet er der flere fejl:

function fade(Pct) {
  if(Pct==0){
        lok=top.location.href;
        top.location.href=lok.substring(0, lok.indexOf("default.asp"));
    }else{
        document.getElementById("translag").style.filters.alpha.opacity=Pct;
        nyPct -= 1;   
        setTimeout("fade(" + nyPct + ")", 1);
//tider under omkring opdateringsrate for skærm vil ikke give noget, så prøv med mere end 20 !-)
    }   
}

-- prøv iøvrigt at kigge på http://roenving.users.whitehat.dk/WD5Opacity.html, som forøvrigt også har været forældet i længere tid !-)
Avatar billede roenving Novice
02. februar 2005 - 04:17 #2
Hov ...

        Pct -= 1;   
        setTimeout("fade(" + Pct + ")", 1);
Avatar billede netro Nybegynder
02. februar 2005 - 04:26 #3
Jeg er klar over, det kun understøttes af IE, og jeg bryder mig i øvrigt slet ikke om den effekt, men det er en helt anden sag.

Tallet 1 var kun for at teste - den skal nærmere stå til 50.

Det melder fejl nu - formentlig pga. linie 6?
Avatar billede roenving Novice
02. februar 2005 - 04:31 #4
Hvis du kigger på linket, kan du se, at jeg gør præcis det samme, men måske skal du i den konstruktion lige tilføje en casting til en talværdi:

        document.getElementById("translag").style.filters.alpha.opacity=+Pct;
Avatar billede netro Nybegynder
02. februar 2005 - 04:38 #5
Ja, hvis jeg fjerner .style som i dit eksempel, virker det.
Men det går stadig alt for langsomt!?
Avatar billede netro Nybegynder
02. februar 2005 - 04:45 #6
Det kunne være, jeg i stedet skulle lave 20 GIF'er på 1x1 px med hver deres grad af transparens og så bruge dem som baggrund i div'en. Ville det være en god løsning?
Avatar billede roenving Novice
02. februar 2005 - 09:00 #7
Du kan jo prøve at se, hvor det går hurtigt nok, ved at ændre på timeoutens tid ...
Avatar billede netro Nybegynder
02. februar 2005 - 17:55 #8
Det var ikke noget stort hit. Jeg ved ikke, hvad der er galt med den filter-løsning, men det må vi nok droppe igen.

Tak for hjælp - læg et svar, så får du points :)
Avatar billede roenving Novice
03. februar 2005 - 09:19 #9
Oki '-)
Avatar billede roenving Novice
04. februar 2005 - 09:37 #10
-- og tak for 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
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