Archief - Aanroepen van functies met setTimeout()

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

kaketoe

Legacy Member
Hallo!
Ik zit met een vreemd probleem... Ik ben geen leek op het vlak van programmeren, maar javascript heb ik nooit echt veel tijd ingestoken en daar is nu verandering in gekomen.

Ik probeer het volgende te doen:
Ik heb een reeks <span id="colx"><ul><li>...</li></ul><span (enz...)
En zo heb ik een 10-tal spans.

Nu wil ik ze één voor één een seconde laten zien, dan hiden en dan de volgende (met de volgende index) laten zien. Totdat we bij de laatste komen en dan beginnen we opnieuw.

Nu loopt firefox vast op dit script: (ik had het eerst geprobeerd met recursie, maar dat bleek ook niet te werken)

Met behulp van JQuery:
Code:
        <script type="text/javascript">
            var i = 1;
            $(function callme(){
                while (true) {
                    $("#col" + i).toggle();
                    setTimeout("$(\"#col\"+i).hide()", 1000);
                    i++;
                    i %= 11;
                }
            });
        </script>

Ik vermoed dat de thread ergens vastloopt, maar er moet toch een mogelijkheid zijn om een nieuwe thread op te starten die zo zijn werk kan doen? Als dat al niet automatisch gebeurd.

U ziet het, ik weet er echt bitterweinig van...

Enlighten me!

Groetjes,
kaketoe

Drone

Legacy Member
Als de code al zou werken zouden alle elementen aan en uit gaan op het zelfde moment. De setTimeout gaat de coden niet stoppen maar wordt asynchroon uitgevoerd. Ik weet wel niet direct een antwoord op je vraag. Ik ben een programmeer leek die al veel tijd heeft gestoken in Javascript. :p

Wat doet de %= operator btw?

Zero Grav

Legacy Member
Ik zou het wel kunnen oplossen in JQuery, niet in gewoon Javascript. Maar dan wel pas morgen.

Zero Grav

Legacy Member
Ja, nu ge het zegt, 'k had niet verder gekeken dan de outlines van die functie eigenlijk. Ik speurde dus naar een each() om te kijken of het een JQuery loop was. ^^

Kunt ge eens een omsluitende div ofzo tonen? Dat ik de id/class daarvan kan gebruiken om de loop uit te voeren.

Ahja, maar gij wilt een soort slideshowke tonen? Dan moet ge hier eens een paar threads verder kijken. 't Is net nog maar één voorbijgekomen.

kaketoe

Legacy Member
Euh, elk element heeft een verschillend id (id="colx") met x een cijfer van 1..10. En daarbij hebben ze nog allemaal een section die "sponsortext" heet.

(de eigenlijke functie zou een soort van slideshow moeten worden die allemaal sponsors weergeeft, het zijn er 50 dus zocht ik naar een handige manier om die allemaal aan bod te laten komen)

De %= operator is de modulooperator die de rest na deling door het tweede lid teruggeeft en in het eerste lid steekt.

Die delay() ga ik eens naar kijken, dat ziet er behoorlijk boeiend uit. Maar dat geeft helaas geen antwoord waarom mijn huidig snippetje niet werkt :( Imo zit het vrij basic in elkaar...

Die thread voor die slideshow ga ik ook eens induiken!

Alleszins reuzebedankt voor de vlotte antwoorden!

kaketoe

Legacy Member
Oké, dit heb ik eens geprobeerd maar het werkt nog niet... Hij voert de loop slechts éénmaal uit... JQuery begrijp ik niet zo goed dus kan iemand mij het uitleggen?

Code:
			$(function() {
				$(".sponsortext").each(function(index) {
					$(this).show("slow");
					$(this).delay(800).hide("slow");
				});
			});

(sorry voor de slechte indentatie)
De slideshow thread heb ik helaas niet gevonden...


Groetjes

Drone

Legacy Member
Je kan each vergelijken met een foreach loop. Ik neem aan dat hij alle elementen aan een uit doet op het zelfde moment? Each gaat in dit geval op iedere element show() en dan hide() doen. Net zoals setTimeout gaat delay javascript niet stoppen maar wordt die asynchrone uitgevoerd op het element zelf.

Je moet het maar eens testen met setTimeout. Je zal eerst "Lies!" zien en dan "First!" omdat setTimeout de code niet tegen stopt maar zijn eigen "weg" gaat. Het is dus niet te vergelijken met zoiets als Thread.sleep() in andere programeertalen.

Code:
setTimeout(function(){
    alert("First!")
}, 5000);

alert("Lies!");

Ik heb het niet getest maar zoiets zou normaal gezien werken. Ieder element krijgt een verschillende delay wanneer hij show moet doen.

Code:
$(".sponsortext").each(function(i)){
    $(this).delay(1000 * i)
             .show("slow")
             .delay(800)
             .hide("slow");
});

Javascript is een beetje een rare taal. Er zijn veel mensen die het kunnen gebruiken zoals ik. Maar ik denk dat er niet zoveel zijn die echt heel goed met javascript kunnen werken.

Hidden Features of JavaScript? - Stack Overflow leuke link met wat javascript voorbeeldjes

kaketoe

Legacy Member
Heel vreemd, bij mij doet dat helemaal niets?

Inderdaad echt absurd dat javascript niet serieel wordt verwerkt... Ik heb nog nooit met zoiets vreemds gewerkt :)
Alleszins bedankt voor de grote hulp! Ik snap echter wel niet waarom het niet werkt... Firebug laat het even afweten -_-'

Internet Explorer zegt dat hij die "methode niet op dat object kan uitvoeren" :(
(allez, in Aptana Studio toch, wss de development versie van IE die daarin zit ingebakken)

I'll keep you posted.

kaketoe

Legacy Member
Wat suf... Ik heb blijkbaar versie 1.3 staan :P

Ik had nooit gedacht dat er in die korte periode dat jQuery al functionaliteit ging bijkomen die ik ging gebruiken :)
Snel eens updaten en dan eens zien wat het geeft.

kaketoe

Legacy Member
woony zei:
heb thread niet volledig gelezen... Maar heb laatst tutorial gelezen die misschien wat in die trend ligt.
check het eens.
Quick Tip: Easy Sequential Animations in jQuery | Nettuts+

Mooi! Dat doet mij JS een stukje beter begrijpen...

Ik ben er helaas echt niet uitgeraakt. Maar ik heb een workaround gevonden mbv Carousel, een JQuery plugin die eigenlijk ongeveer doet wat ik wou...

Dus deze thread mag dicht, voor de geïnteresseerden, hier nog eens de link:
jquery-infinite-carousel - Project Hosting on Google Code

Jullie zijn allemaal reuzehard bedankt, indirect hebben jullie zeker bijgedragen tot de oplossing :)

Ik ga hier nog komen ^^

Groetjes,
Kaketoe

Tyfius

Legacy Member
Ik ben er ook geen expert in maar volgens mij is uw setup fout. Onderstaand voorbeeld werkt bijvoorbeeld wel:
Code:
$(document).ready(function() {update();});

function update() { 
  $("#board").append(".");
  setTimeout('update()', 1000);
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan