Avatar billede jacob_m Nybegynder
12. februar 2005 - 21:11 Der er 21 kommentarer og
1 løsning

Fading og generelt spm til JavaScript

Hey, jeg vil til og igang med noget DHTML og kender i forvejen til HTML og CSS. Så er gået igang med JavaScript :-P.. Og lavet følgende funktion(er) til at fade et element -->

function clean(elm) //renser elementet med et interval
{
interval=setInterval("makeclean(elm)",10)
}

function foggy(elm) //sløre elementet til 10 opacity
{
clearInterval(interval)
'elm'.filters.alpha.opacity=10
}

function makeclean(elm) //renser elementet til 100 opacity
{
if ('elm'.filters.alpha.opacity<100)
    {
    'elm'.filters.alpha.opacity+=5
    }
else if (window.interval)
    {
    clearInterval(interval)
    }
}

Kan sagtens få scriptet til at virke hvis jeg indsætter et FAST og KENDT navn på f.eks et billede... Men nu har jeg prøvet at gøre funktionen mere fleksibel så man kan bruge det på flere elementer med variablen elm.. Men det virker ik rigtigt.. Tror min defination af variablen er forkert!!

Er der nogle der kan hjælpe lidt på vej...
Avatar billede olebole Juniormester
12. februar 2005 - 22:30 #1
<ole>

'elm' er en streng - hvorimod elm er en variabel  ;o)

Slet alle gåseøjne om elm - så funker det formodentligt

/mvh
</bole>
Avatar billede olebole Juniormester
12. februar 2005 - 22:30 #2
F.eks:
  elm.filters.alpha.opacity=10
Avatar billede Slettet bruger
14. februar 2005 - 09:55 #3
skal man ikke også helst sige

var elm;

jeg er den dårligeste i verden til javascript, så jeg prøver ikke at rette dig olebole :)
Avatar billede roenving Novice
14. februar 2005 - 16:56 #4
>>wicez

-- når det er en parameter er den automatisk deklareret som lokal variabel, så i dette tilfælde vil det direkte være en fejl at forsøge at deklarere den !-)

>>jacob_m

-- og så vil ovenstående kun virke i IE, de andre vil endda lave en javascript-fejl, da filters ikke findes på elementer, som olebole opfriskede mig med forleden ...

-- så når du skal lave den cross-browser, skal du undersøge om det er en IE, f.eks. ved at teste om elm.filters er noget !o]
Avatar billede jacob_m Nybegynder
14. februar 2005 - 17:11 #5
Ang. crossbrowsere så skal det nok komme. Men det er min første egentlige forsøg med JavaScript..

jeg sad og rodede med det her i weekende, da jeg ikke kun se jeres svar pga. af Eks.dk var nede.. Og kom selv frem til følgende..

------------------

function foggy(elm)
{

interval=setInterval("makefoggy("+'elm'+")",10);
}

function makefoggy(elm)
{
//elm = 'box';
var get = document.getElementById(elm);
if (get.filters.alpha.opacity>40)
    {
    get.filters.alpha.opacity-=5
    }
else if (window.interval)
    {
    clearInterval(interval)
    }
}


function clean(elm)
{

interval=setInterval("makeclean("+'elm'+")",10);
}

function makeclean(elm)
{

var get = document.getElementById(elm);
if (get.filters.alpha.opacity<100)
    {
    get.filters.alpha.opacity+=5
    }
else if (window.interval)
    {
    clearInterval(interval)
    }
}
--------------------------------

Nu virker det, NÆSTEN.. Min fejl er nu omkring linien

funktionerne:

function foggy(elm)
{

interval=setInterval("makefoggy("+'elm'+")",10);
}

og

function clean(elm)
{

interval=setInterval("makeclean("+'elm'+")",10);
}

Jeg kan sagtens indsætte et "kendt" opbjekt ind i funktionerne som

interval=setInterval("makeclean('kendtopbjekt')",10);

Men har problemmer med at få brugt den variablen som bliver indsat i funktionen (elm).. Er der nogle der kan hjælpe mig, og overhovedet forstår mig :P
Avatar billede roenving Novice
14. februar 2005 - 17:20 #6
Du skal også fjerne apostrofferne i start-funktionerne !-)

-- for ellers er det præcis bogstaverne e - l - m, som bliver overført til dine funktioner ...
Avatar billede jacob_m Nybegynder
14. februar 2005 - 17:25 #7
nu har jeg prøvet med

function clean(elm)
{

interval=setInterval("makeclean("+elm+")",10);
}

men stadig fejl :(..
Avatar billede roenving Novice
14. februar 2005 - 17:29 #8
Har du id="etId" på det element ?-)
Avatar billede jacob_m Nybegynder
14. februar 2005 - 17:32 #9
ja... for hvis jeg sætter

function clean(elm)
{

interval=setInterval("makeclean('kendtobjekt')",10);
}

Så virker det fint, men når det så er variabelt.. jae.. så dur det ikke..
Avatar billede roenving Novice
14. februar 2005 - 17:36 #10
Det forstår jeg ikke, kan du lægge et link ?-)

-- og du kan se min måde at gøre det på: http://roenving.users.whitehat.dk/WD5Opacity.html ...
Avatar billede jacob_m Nybegynder
14. februar 2005 - 17:40 #11
http://greyz.dk/showroom.php

Og har arbejdet med din funktion... Men den her kan tidsbestemmes, det kunne jeg ik få din til..
Avatar billede roenving Novice
14. februar 2005 - 17:53 #12
-- men du har da ikke gjort, som du har vist ?-)

function foggy(elm)
{

interval=setInterval("makefoggy("+elm+")",10);
}

//...

function clean(elm)
{

interval=setInterval("makeclean("+elm+")",10);
}
Avatar billede jacob_m Nybegynder
14. februar 2005 - 18:02 #13
Nej.. ændre det hele tiden for at prøve noget nyt.. men har OGSÅ prøvet det viste der :-P
Avatar billede jacob_m Nybegynder
14. februar 2005 - 18:03 #14
nu er den såen :P
Avatar billede roenving Novice
14. februar 2005 - 18:16 #15
Hrm, så kommer den med fejl, som ifølge kilden er i if-linjen i funktionerne ...

Prøv at indsætte en linje, som alerter get.filters.alpha.opacity, hvis den er undefined eller laver en fejl, fjerner du properties indtil du har noget som giver [object] ...

-- iøvrigt er dit valg af variabelnavne risky, da det sagtens kan tænkes at give fejl på et tidspunkt at bruge hhv. 'get' og 'interval', så det ville jeg i hvert fald ændre !-)

-- og så definerer du ikke interval udenfor funktionerne, så den vil aldrig findes uden for de steder, du sætter dem ...

F.eks.

var intId;

function foggy(elm)
{

intId=setInterval("makefoggy("+elm+")",10);
}
Avatar billede jacob_m Nybegynder
14. februar 2005 - 19:13 #16
--> roenving: Men det løser da ik rigtig vores problem gør det ;-)..
Avatar billede roenving Novice
14. februar 2005 - 19:16 #17
-- har du prøvet debuggingen (2. afsnit !-)
Avatar billede jacob_m Nybegynder
14. februar 2005 - 19:23 #18
Jaer.. Men har sq fundet ud af det... Ved hjælp af lidt indspiration fra PHP (som jeg er mere hjemme i).. Kom til at tænkte på hvordan man "escaper" i PHP.. Og så stod denne løsning klar for mig:

intid=setInterval("makefoggy(\'"+elm+"\')",10);

Og det virker... Og foresten det der med at gøre indid "global", er en meget dårlig idé.. for så kan den ikke fade ned igen... Hvertfald ikke hvis man bruger det samme navn :P..
Avatar billede jacob_m Nybegynder
14. februar 2005 - 19:24 #19
Nogle der vil have point..
Avatar billede roenving Novice
14. februar 2005 - 19:30 #20
-- så kunne man initialisere den igen til null !-)

-- og selvfølgelig skal man huske plingerne, som du dog ikke behøver at escape, så bare sådan burde virke:

intid=setInterval("makefoggy('"+elm+"')",10);

-- og gen-initialisere:

else if (intid)
    {
    clearInterval(intid);
    intid = null;
    }
}
Avatar billede jacob_m Nybegynder
14. februar 2005 - 19:31 #21
hehe ok..

men det virker kanon fint men den opstilling jeg har nu!!.. prøv at tjek!!..
Avatar billede jacob_m Nybegynder
14. februar 2005 - 19:33 #22
eller nej, du har nok ret.. for bliver den IKKE fade helt ud.. så går der koks i det..
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