[JavaScript] Generator kolorowych kwadratów


(xDarkness) #1

(Drobok) #2

Zapętlasz się, wywołujesz losowanie, potem wyświetl, potem losowanie itd :stuck_out_tongue:

Po co ci tablica liczb i masa ifów? Wpisz w nią kolory i losuj indeks :slight_smile:

Nie przekazujesz zmiennych bo deklarujesz je lokalnie.

Styl wrzuć w css jeśli go nie zmieniasz (będzie mniej komend w każdym przejściu)

Przykład:

var t = ['red','blue','green','aqua','yellow','pink','purple','orange','black'];

td.style.backgroundColor=t[Math.floor(Math.random() * tablica.length)];

(Konrad Kosowski) #3

http://jsbin.com/ebifiz/2/edit

Przy pomocy jquery, ale mamy 2013 rok…

A to dlatego, że ta zmienna liczba jest lokalna dla funkcji. Poczytaj o widoczności zmiennych i o zwracaniu wartości przez funkcję. To jest uniwersalne dla prawie wszystkich języków programowania (zwłaszcza tych współczesnych) i jest podstawa podstaw z tych najbardziej podstawowych.


(xDarkness) #4

(Drobok) #5

Błędy miną z czasem :))

Nie usuwaj całej tabeli, tylko przejdź po td i zmień kolory w setInterval (nie musisz powtarzać ciągle tego samego).

for (var i = 0, tr; tr = tab.rows[i]; i++) 

   for (var j = 0, td; td = tr.cells[j]; j++) 

      td.style.backgroundColor=t[Math.floor(Math.random() * t.length)];

Jeśli kod napisany przez ciebie by działał nic byś nie zobaczył (zaraz po utworzeniu “usuwasz” tablicę)


(xDarkness) #6

Nie do końca rozumiem.

Czy mam objąć setInterval instrukcję losującą

for (var i = 0, tr; tr = tab.rows[i]; i++) 

   for (var j = 0, td; td = tr.cells[j]; j++) 

      setInterval(function() { td.style.backgroundColor=t[Math.floor(Math.random() * t.length)]; },1000);

i całość umieścić po

var td = document.createElement("td");

?

Mam error: Uncaught TypeError: Cannot call method ‘appendChild’ of undefined odnoszący się do tr.appendChild(td);

Zauważyłem też, że kiedy definiuję zmienną tab globalnie, to mam zupełnie co innego:

Uncaught TypeError: Cannot read property ‘rows’ of undefined odnoszący się do for (var i = 0, tr; tr = tab.rows_; i++)_


(Drobok) #7

To samowystarczalna funkcja, masz zrobić z niej funkcję i wkleić po wykonaniu wyświetl w setInterval


(xDarkness) #8

Dziękuję !!

Wyświetlał się wtedy error: Uncaught TypeError: Cannot call method ‘appendChild’ of undefined odnoszący się do tab.appendChild(tr);

Tak czy inaczej bardzo dziękuję :slight_smile: