Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
[list=1]
• Waar hoort mijn topic?
• Webdesign, Markup & Clientside Scripting Policy - Quickstart
PRG >> WEB
Roepen: "Hij doet 't niet" is nogal vaag. Mogen wij nu gaan raden wat de bedoeling is en wat er niet werkt?C.44 schreef op donderdag 22 februari 2007 @ 02:39:
Ik heb nu al een hele tijd lopen hannessen met een setTimeout die ik gewoonweg NIET werkend krijg. Al diverse syntaxen geprobeerd, browser tig keer moeten killen en ook vaak genoeg gewoon geen reactie uberhaupt. Zelfs volgens mij al iemand in een IRC kanaal weggejaagd :x
Zowieso zet je nu in je lus meteen 100 timeouts in 1 klap, ik neem aan dat je na het verstrijken van 1 timeout de volgende wil zetten. Daarnaast moet je eens kijken naar setInterval, die is veel makkelijker in jouw geval.
Ik heb het even quick'n'dirty verbouwd:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <html> <head> <script language=javascript> var count=0; var ival; function testfunctie() { ival = window.setInterval('doeIets()', 100); } function doeIets() { var kort = document.getElementById('moveIt'); count += 1; kort.innerHTML = count; if (count>=100) window.clearInterval(ival); } </script> </head> <body> <a href="#" onClick="testfunctie();">testlink</a> <div id="moveIt">0</div> </body> </html> |
Tot slot wil ik je er nog even op wijzen dat het wel zo netjes is om attributen van HTML tags in quotes te zetten.
[ Voor 40% gewijzigd door RobIII op 22-02-2007 03:04 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
1
| kort.innerHTML = a; |
neer dan telt ie zo snel naar de 100 dat ik de overgang niet meer kan zien
De bedoeling:
Ik wil graag weten hoe ik nu mijn setTimeout syntax moet aanpassen zodat die iig al eens klopt. Ik had ook graag geweten of er ergens anders in m'n "code" een hiaat zit waar dit hele ding zich aan stoort en alle medewerking weigert.
Context:
Niet van belang, tis gewoon een test van wat code
Zelf gezocht:
Diverse topics hier gelezen, zonder echt uitkomsten waar ik iets mee kan of met mijn tot nu toe beperkte kennis van JS kon aanpassen naar een eenvoudig tellertje. Ook diverse pagina's via google bekeken en JavaScript The Definitive Guide 5th Ed. erbij genomen. Alles zonder resultaat tot nu toe.
enniewees, ik krijg de syntax van setTimeout dus niet zodanig dat ie om de tiende seconde (100ms) de nieuwe waarde van a naar de div schopt.
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Ja, maar zoals ik al zei zet je in je lus in 1 klap 100 timeouts; die dus ook alle 100 net na elkaar worden afgevuurd. Je wil pas als de vorige timeout verstreken is weer een nieuwe tijd wachten (= nieuwe timeout zetten).C.44 schreef op donderdag 22 februari 2007 @ 02:56:
Ok anders dan, ik kan op het linkje met de onClick klikken, maar er gebeurt niets. Haal ik het hele timergebeuren weg en zet ik er gewoon
code:
1 kort.innerHTML = a;
neer dan telt ie zo snel naar de 100 dat ik de overgang niet meer kan zienDaarom wil ik er een timertje tussen zodat ik de overgang ook daadwerkelijk kan zien.
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <html> <head> <script language=javascript> var count=0; function doeIets() { var kort = document.getElementById('moveIt'); count += 1; kort.innerHTML = count; if (count<100) window.setTimeout('doeIets()',100); } </script> </head> <body> <a href="#" onClick="doeIets();">testlink</a> <div id="moveIt">0</div> </body> </html> |
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
[ Voor 6% gewijzigd door C.44 op 22-02-2007 03:17 ]
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Ik zie niet waarom je dat zou willen. Mocht je per-se een for-loopje willen gebruiken dan kun je natuurlijk al die timeouts tegelijk aanmaken, maar de timeout waarde zelf steeds met 100 ophogenC.44 schreef op donderdag 22 februari 2007 @ 03:15:
Om het geheel nog beetje lastiger te maken, is het ook een mogelijkheid om iets dergelijks in een for loopje te zetten ?
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Ben ondertussen al weer druk aan het proberen geslagen daar niet van
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Met timers pauseer je de executie van de rest van je script niet, er wordt enkel een timer gestart en vervolgens zal de rest van je script gewoon verder doorlopen worden. Als uiteindelijk de timer afloopt en de javascript engine op dat moment idle is dan wordt de handler gedefinieerd in je timer aangeroepen (of in het geval van een expressie die expressie geevalueerd).
Note overigens het verschil tussen een functie-reference als handler en een expressie mbt scope:
1
2
3
4
5
| function timer() { var foo = 'bar'; setTimeout('alert(foo)', 1000); } |
zal niet werken; aangezien het een expressie is die geevalueerd moet worden is er geen expliciete scope voor de executie-context
dit werkt wel (closure):
1
2
3
4
5
6
7
8
9
| function timer() { var foo = 'bar'; var handler = function() { alert(foo); } setTimeout(handler, 1000); } |
Praktisch voorbeeldje van een timeout functie die zichzelf weer aanroept:
1
2
3
4
5
6
7
8
9
10
11
12
| function timer() { var i = 0; var handler = function() { window.status = ++i; if (i < 100) setTimeout(arguments.callee, 100); } setTimeout(handler, 100); } timer(); |
[ Voor 48% gewijzigd door crisp op 22-02-2007 10:49 ]
Intentionally left blank
Als dat zo is kan ik dan niet gewoon meerdere functies maken en als ik dan wel een echte pauze wil inlassen voordat andere code word gestart gewoon een timer starten met een verwijzing naar een functie met het volgende stuk code ?
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Grotendeels correct, enkel zal de timer-code pas uitgevoerd worden als de javascript-engine idle is aangezien javascript zeg maar single-threaded is.C.44 schreef op donderdag 22 februari 2007 @ 10:51:
Dus als ik het goed begrijp doet ie eerst de eerste regel, dan zet start er bijvoorbeeld op regel 2 een timer die word op een zijspoor gezet en ondertussen gaat de engine verder met regel 3 4 5 enzovoorts, en als ergens tussendoor de timer afloopt word het gedeelte dat vasthangt aan de timer pas uitgevoerd.
inderdaad, je zal dat soort dingen moeten uitsplitsen. En of je dat met aparte functies doet of met nifty anonymous functies en closures maakt niet zoveel uitAls dat zo is kan ik dan niet gewoon meerdere functies maken en als ik dan wel een echte pauze wil inlassen voordat andere code word gestart gewoon een timer starten met een verwijzing naar een functie met het volgende stuk code ?
Intentionally left blank
RobIII in "[JS] setTimeout spoor compleet bijster"C.44 schreef op donderdag 22 februari 2007 @ 10:51:
Als dat zo is kan ik dan niet gewoon meerdere functies maken en als ik dan wel een echte pauze wil inlassen voordat andere code word gestart gewoon een timer starten met een verwijzing naar een functie met het volgende stuk code ?
Zoals ik al meermalen heb gezegd; je kunt toch gewoon de volgende timeout schedulen op het moment dat de vorige is afgelopen? Zo moeilijk is dat toch niet? (Zeker niet na crisp's veel nettere voorbeelden)
Ah, ik begreep je vraag niet goed
[ Voor 3% gewijzigd door RobIII op 22-02-2007 10:58 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Alleen ben ik nu even aan het kijken hoe ik nu precies m'n divje kan "animeren". Ik wil em eerst 59 keer een pixel naar beneden en dan wil 14 keer een pixel aan de boven en onderkant eraan padden. Maar met padden verandert wel het midden van je cel. Die moet dus weer iets meer dan 7 pixels omhoog om de text die in het divje staat bij het padden op dezelfde plek te houden.
Zal hier even de code plempen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| <script language=JavaScript>
function testfunc(i)
{
var testje = document.getElementById(i).style;
var a = 40;
var movedown = function()
{
testje.top = a++;
if (a < 100)
{
setTimeout(arguments.callee, 10);
}
}
setTimeout(movedown, 1);
var b = 0;
var expandPadding = function()
{
c = b + " 0 " + b + " 0";
testje.padding = c;
b++
if (b < 15)
{
setTimeout(arguments.callee, 100);
}
}
setTimeout(expandPadding, 701);
var d = 100 ;
var correctionForPadding = function()
{
testje.top = d;
d = d - 1;
if (d > 96)
{
setTimeout(arguments.callee, 10);
}
}
setTimeout(correctionForPadding, 1700);
}
</script> |
Nu vraag ik me af hoeveel tijd (in ms) heeft het geheel nodig om elke handeling te doorlopen ? Ik heb eraan proberen te tellen, maar uiteindelijk dan lijkt het erop dat of de volgende handeling te vroeg of te laat begint. Nu lijkt me toch dat zoiets uit te rekenen moet zijn. Toch ?
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya