Toon posts:

[JS] layer openen en na 2 sec. sluiten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende code, die moet zorgen dat er een layer visible wordt en na 2 seconden weer hidden wordt:
code:
1
2
3
4
5
6
7
function closelayer(layer){
    layer.style.visibility='hidden';
}
function showlayer(layer){
    layer.style.visibility='visible';
    setTimeout("closelayer(layer)",2000);
}


Dit werkt echter niet helemaal goed.
Heb ook het volgende geprobeerd:
code:
1
2
3
4
5
function showlayer(layer){
    layer.style.visibility='visible';
    setTimeout("",2000);
    layer.style.visibility='hidden';
}

Maar ook dit werkt niet goed...

Wie kan mij helpen?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Wat betekent "werkt niet goed"? Foutmeldingen? Er gebeurt niks? Het scherm begint te roken? Geef eens wat meer info. :)

Verder: Javascript hoort bij de buren in Webdesign & Graphics, zoals je in onze stickies had kunnen lezen. ;)

PW>>WG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
volgens mij gebruik jij de 'setTimeout();' functie super fout, ik ben geen javascript expert, maar hoort dat ding geen functie aan te roepen?

This message was sent on 100% recyclable electrons.


Verwijderd

Topicstarter
Sorry...niet goed gelezen.

Werkt niet goed houdt in dit geval in dat het helemaal niet werkt...de layer blijft dus visible...

Verwijderd

Topicstarter
BasieP schreef op zaterdag 08 oktober 2005 @ 15:58:
volgens mij gebruik jij de 'setTimeout();' functie super fout, ik ben geen javascript expert, maar hoort dat ding geen functie aan te roepen?
Hij roept toch een functie closelayer() aan??

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
Verwijderd schreef op zaterdag 08 oktober 2005 @ 15:59:
[...]


Hij roept toch een functie closelayer() aan??
Ja, maar wordt deze functie wel uitgevoerd? Gooi er eens een alert() tussen bijv.. En indien deze dus misschien helemaal niet wordt uitgevoerd, kan die setTimeOut() wel met de variabelen overweg die je aan de functie meegeeft?

binnenkort een hele dikke casemod :P


Verwijderd

Topicstarter
Heb ik inderdaad geprobeerd met die alert()...dat werkt wel gewoon...

Ik denk dat het inderdaad in die variabele ligt...maar hoe doe ik het anders...

Verwijderd

Topicstarter
Ik heb de oplossing gevonde.!

Ik heb nu per layer een aparte close() functie. Kennelijk kan setTimeout niet overweg met een variabele die meegegeven wordt...

Dank voor de hulp!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 20:54

Cyphax

Moderator LNX
Verwijderd schreef op zaterdag 08 oktober 2005 @ 16:05:
Heb ik inderdaad geprobeerd met die alert()...dat werkt wel gewoon...

Ik denk dat het inderdaad in die variabele ligt...maar hoe doe ik het anders...
layer.style.display = 'none'
of 'block' als je 'm wilt laten zien.
Verwijderd schreef op zaterdag 08 oktober 2005 @ 16:06:
Ik heb de oplossing gevonde.!

Ik heb nu per layer een aparte close() functie. Kennelijk kan setTimeout niet overweg met een variabele die meegegeven wordt...

Dank voor de hulp!
Het probleem is dat je het object niet meegeeft in die setTimeout volgens mij. Als je 'm zo zou doen werkt ie misschien ook:
setTimeout("closelayer(" + layer + ")",2000);
En anders kun je nog ervoor kiezen om ipv het object, het id van die layer mee te geven.

[ Voor 48% gewijzigd door Cyphax op 08-10-2005 16:08 ]

Saved by the buoyancy of citrus


  • Ansur
  • Registratie: Januari 2004
  • Laatst online: 18-04 07:57
Heb ooit een vergelijkbaar probleem gehad.

Zo zou het moeten werken:

JavaScript:
1
setTimeout("closelayer('" + layer + "')", 2000);

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 20:54

Cyphax

Moderator LNX
Ansur schreef op zaterdag 08 oktober 2005 @ 16:09:
Heb ooit een vergelijkbaar probleem gehad.

Zo zou het moeten werken:

JavaScript:
1
setTimeout("closelayer('" + layer + "')", 2000);
Hou er rekening mee dat je zo een string meestuurt en de functie verwacht een referentie naar een object. :)
Waarschijnlijk zou jij in je functie beginnen met iets als var obj = document.getElementById(layer);?

Saved by the buoyancy of citrus


Verwijderd

Cyphax schreef op zaterdag 08 oktober 2005 @ 18:03:

Hou er rekening mee dat je zo een string meestuurt en de functie verwacht een referentie naar een object. :)
Dat ding werkt prima met een function reference, maar ook met een string, die gewoon geëvalueerd zal worden (eval).

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 20:54

Cyphax

Moderator LNX
Verwijderd schreef op zaterdag 08 oktober 2005 @ 18:05:
[...]

Dat ding werkt prima met een function reference, maar ook met een string, die gewoon geëvalueerd zal worden (eval).
Waar evalueert ie 'm dan?

Saved by the buoyancy of citrus


Verwijderd

Waar evalueert wie wat? En waarom zou dat moeten?

http://docs.sun.com/source/816-6408-10/window.htm#1203758

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 20:54

Cyphax

Moderator LNX
Hehehe jij begon over dat iets geevalueerd werd maar ik snap wat je bedoelt na het zien van die pagina waar je naar linkt. :)
Wanneer je dus setTimeout('showlayer(layer)', 200) uitvoert en je hebt een object layer, dan wordt een referentie meegestuurd dus?

Saved by the buoyancy of citrus


Verwijderd

Cyphax schreef op zaterdag 08 oktober 2005 @ 18:16:

Hehehe jij begon over dat iets geevalueerd werd maar ik snap wat je bedoelt na het zien van die pagina waar je naar linkt. :)
Wanneer je dus setTimeout('showlayer(layer)', 200) uitvoert en je hebt een object layer, dan wordt een referentie meegestuurd dus?
Nee, er wat er wordt meegestuurd is window.layer aangezien bij de setTimeout methode de scope van het window object wordt gebruikt (de standaard scope). Er moet dus een "globale" variabele bestaan die layer heet.

Wat je wel kunt doen, is bijvoorbeeld een functie maken die doSomething() heet. Dan kun je setTimeout(doSomething, 1000) gebruiken, dan wordt na 1000 milliseconden de functie doSomething aangeroepen. Je kunt dan alleen geen argumenten meegeven.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:09

crisp

Devver

Pixelated

closures:
JavaScript:
1
2
3
4
function showlayer(layer){
    layer.style.visibility='visible';
    setTimeout(function() { closelayer(layer); }, 2000);
}

hoewel dit mogelijk wel een recept is voor memory-leaks in met name IE...

Intentionally left blank


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 20:54

Cyphax

Moderator LNX
Verwijderd schreef op zaterdag 08 oktober 2005 @ 18:20:
[...]

Nee, er wat er wordt meegestuurd is window.layer aangezien bij de setTimeout methode de scope van het window object wordt gebruikt (de standaard scope). Er moet dus een "globale" variabele bestaan die layer heet.

Wat je wel kunt doen, is bijvoorbeeld een functie maken die doSomething() heet. Dan kun je setTimeout(doSomething, 1000) gebruiken, dan wordt na 1000 milliseconden de functie doSomething aangeroepen. Je kunt dan alleen geen argumenten meegeven.
Ah ik herinner mij hier ook mee gezeten hebben, ik heb uiteindelijk besloten juist dus de id's mee sturen, dat gaat namelijk prima. Ik maak liever niet globale variabelen aan als het niet hoeft.

Saved by the buoyancy of citrus

Pagina: 1