if(fadeFrame<steps+1) { ++fadeFrame; var fFadeIt = function a() { fadeIt(obj, steps, delay, delta); }; tFader = setTimeout(fFadeIt,delay); } } function fadeIn (obj, steps, delay, pause ) { clearTimeout(tFader); fadeFrame=0; var fadeDelta = (((100-(obj.filters.alpha.opacity))/steps)+1); var fade = function a() { fadeIt(obj, steps, delay, fadeDelta); }; this.setTimeout(fade, pause); } function fadeOut(obj, steps, delay, pause ) { clearTimeout(tFader); fadeFrame=0; var fadeDelta = -((obj.filters.alpha.opacity/steps)+1); var fade = function a() { fadeIt(obj, steps, delay, fadeDelta); }; this.setTimeout(fade, pause); } </script>
Hvis jeg gerne vil kalde fadeout funktionen, har en streng der hedder "hej" som indeholder "1", pg et div layer det hedder "box1" hvordan gør jeg så?. Normalt ville jeg gøre sådan her:
Jeg har lavet to wrapper-funktioner, som gør at man også kan bruge strenge ... <script> function fadeInByName( objName, steps, delay, pause) { fadeIn( document.getElementById(objName), steps, delay, pause); } function fadeOutByName( objName, steps, delay, pause) { fadeOut( document.getElementById(objName), steps, delay, pause); }
Ok - læst og taget til efterretning ... Jeg har rettet min kode til, så der i event-handlers ikke bruges javascript-præfix ... (og ja, koden bliver ved med at virke)
Men lige som en sidebemærkning (som dog også er relevant for dette script)... er det kun IE, som understøtter filters.alpha.opacity ? -- jeg kørte det tidligere i dag i Opera6.05 og Netscape7 og der var ingen fading i nogen af dem :-( ....
En vigtig ting, som der også irriterer mig, da jeg lavede fading-routinen, er, at jeg implicit kun kan fade en ting af gangen.... Min store drøm var at kune tilføje en variablen til det objekt, man fader, så den selv holdte styr på, hvor langt den var nået i fadingen (fadeFrame og tFader variablerne)
Skal du tildele objektet en metode, der hholder styr på fade-rutinen, skal du bruge objektorienteret programmering (OOP). Prøv en Google-søgning, så kan du sikkert finde en tutorial /mvh
jeg har fundet en hjemmeside, hvor der bliver forklaret at man på et String objekt nemt kan tilføje properties og methods ved at bruge "den indbyggede" prototype-property... - Det er dog kun muligt hvis objektet er et "JavaScript object that is created using a constructor function"... (ref : http://www.developingskills.com/ds.php?article=jstrim&page=1 )
Her er det jo nogle HTMLElement-objekter (Div, Span, TD, osv) ... Er det muligt at tilføje henholdsvis "fadeFrame" og "tFader"-property direkte på disse objekter, så fade-routiene evt. kommer til at se ud som følger : function fadeIt(obj, steps, delay, delta) { if(delta>0) {obj.display = "block";} if(delta<0 && obj.filters.alpha.opacity==0) {obj.display="none";}
if(obj.fadeFrame<steps+1) { ++obj.fadeFrame; var fFadeIt = function a() { fadeIt(obj, steps, delay, delta); }; obj.tFader = setTimeout(fFadeIt,delay); } }
jeg har forsøgt med : function addFadingProperties(obj) { obj.prototype.tFader = null; obj.prototype.fadeFrame = 0; }
men det virker ikke (jeg får at vide at prototype enten er NULL eller ikke er et objekt)
Hvis der er en af jer, som lige har svaret, ville jeg være glad - ellers bliver jeg jo nok nød til at oprette et spm her (med der tilhørende forklaring af området igen)
Nej, det er det, jeg skriver ... du må ud og finde en tutorial om OOP. Så vil du forstå, hvad der menes. Det vil føre for vidt at begynde at lære dig det her i forumet :) /mvh
Ok .. så skal jeg lige have gentaget, hvad det et, du har brug for...
Så vidt jeg kan forstå på den kode, du har leveret, sam t dit spørgsmål, så vil du gerne kunne kalde fadeOut-funktionen, hvor du angiver elementet som en streng (evt. gemt som javascript-variabel)
Jeg kunne ikke rigtig bruge dit svar til noget. Men du kan få pointsne somt tak for ulejligheden :), og så kan jeg jo bruge scriptet en anden gang.
Synes godt om
Ny brugerNybegynder
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.