Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pseudo-wątki w javasript
slammer
post
Post #1





Grupa: Zarejestrowani
Postów: 187
Pomógł: 6
Dołączył: 31.08.2005
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Napisałem klasę generującą coś na wzór wątków:
  1. Object.prototype.$ = function(v){
  2. return document.getElementById(v);
  3. }
  4. MyInterval = function (f, t){
  5. this.func = f
  6. this.time = t;
  7. this.handler;
  8.  
  9. this.start = function() {
  10. this.handler = setInterval(this.func, this.time);
  11. }
  12. this.repeat = function(h) {
  13. h.handler = setInterval(h.func, h.time);
  14. }
  15. this.sleep = function(time) {
  16. this.stop();
  17. setTimeout(this.repeat, time, this);
  18. }
  19. this.stop = function() {
  20. clearInterval(this.handler);
  21. }
  22. }
  23. watek :
  24. <div id="watek1"></div>
  25. watek 2:
  26. <div id="watek2"></div>
  27. watek 3:
  28. <div id="watek3"></div>
  29. var i = 0;
  30. animacja = function() {
  31. i+=2;
  32. $('watek1').style.marginLeft = i+'px';
  33. $('watek1').innerHTML = i;
  34. if(i == 26) {watek.sleep(3000)};
  35. if(i == 60) {watek.sleep(3000)};
  36. if(i == 70) {watek.stop()};
  37. }
  38. var j = 0;
  39. animacja2 = function() {
  40. j+=2;
  41. $('watek2').style.marginLeft = j+'px';
  42. $('watek2').innerHTML = j;
  43. if(j == 30) {watek2.sleep(2000)};
  44. if(j == 74) {watek2.sleep(2000)};
  45. if(j == 100) {watek2.stop()};
  46. }
  47. var k = 0;
  48. animacja3 = function() {
  49. k+=2;
  50. $('watek3').style.marginLeft = k+'px';
  51. $('watek3').innerHTML = k;
  52. if(k == 34) {watek3.sleep(1500)};
  53. if(k == 64) {watek3.stop()};
  54. }
  55. watek = new MyInterval(animacja, 500);
  56. watek.start();
  57.  
  58. watek2 = new MyInterval(animacja2, 450);
  59. watek2.start();
  60.  
  61. watek3 = new MyInterval(animacja3, 400);
  62. watek3.start();
  63. </script>

Wszystko jest ok jeśli wywołuje tak jak wyżej lecz jeśli wywołam tak:
  1. watek = new MyInterval(animacja, 500);
  2. watek.start();
  3.  
  4. watek2 = new MyInterval(animacja2, 500);
  5. watek2.start();
  6.  
  7. watek3 = new MyInterval(animacja3, 500);
  8. watek3.start();

to zaczynają dziać się strasznie dziwne rzeczy. Nie dość, że przeskoki idą co 6 (2+2+2) to wykonują się zapewne co 1500 milisekund...

Czy mam jakiś błąd w kodzie, czy tak poprostu zachowuje się Javascript?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 06:22