Autor Zpráva
David1256
Profil
Dobrý den,

v html5 canvasu, resp. v Raphael Frameworku kreslím objekty na canvas.

Kreslení do canvasu probíhá asi takto:
 var utvar = nazevCanvasu.path("M 0 17.3 L 30.6 0.9 L 30.6 169.7 L 2.4 186.1 Z");

Tento kód vykreslí do divu s nazvem nazevCanvasu canvas a vykreslí do něj útvar se souřadnicemi výše.

Problém, však je, že potřebuji vykreslit stejný útvar do několika canvasů (divů) zároveň. Napadlo mě proto jít cestou JS cyklu. Jenomže to by potom musel vypadat kód nějak takto:

 var utvar = nazevCanvasu[i].path("M 0 17.3 L 30.6 0.9 L 30.6 169.7 L 2.4 186.1 Z");

Ale div nemůže být pojmenován jako pole tedy:

<div id="nazevCanvasu[1]"></div>

Nevymyslel byste někdo, co s tím?

Děkuji.
Joker
Profil
David1256:
Žádná věda, může se přece jmenovat nazevCanvasu1
Chamurappi
Profil
Reaguji na Davida1256:
Ale div nemůže být pojmenován jako pole
Může. Proč by nemohl? Akorát to nefunguje jako pole. Ono přímé adresování elementů přes id stejně nefunguje spolehlivě napříč prohlížeči, takže stejně musíš k nalezení svých <div>ů použít document.getElementById a je tedy celkem jedno, jak se jmenují proměnné a jaká jsou ídéčka…
David1256
Profil
Chamurappi:
No jo, jenomže tohle nefunguje:

var utvar = document.getElementById("nazevCanvasu1").path("M 0 17.3 L 30.6 0.9 L 30.6 169.7 L 2.4 186.1 Z");

Undefined is not a function

Ten prvek to totiž nenalezne přes getElementById, ten Raphael framework asi vyžaduje striktně tuhle syntaxi:

var utvar = nazevCanvasu1.path("M 0 17.3 L 30.6 0.9 L 30.6 169.7 L 2.4 186.1 Z");

A <div id="nazevCanvasu1"> v mém HTML existuje.

Jak říkám, dolní kód funguje, horní ne.
Joker
Profil
David1256:
A odkud berete tu JS proměnnou?
edit: Myslím nazevCanvasu1
David1256
Profil
Joker:
var nazevCanvasu1 = new Raphael(document.getElementById('nazevCanvasu1'), 300, 300);
Trefa do černého, díky.
Měl jsem tu proměnnou definovanou v jiném souboru a jak jsem byl zahlcený v kódu, kde je 100x za sebou něco jako toto:
var utvar = nazevCanvasu1.path("M 0 17.3 L 30.6 0.9 L 30.6 169.7 L 2.4 186.1 Z");
Tak jsem byl úplně zaslepen, díky za otevření očí. Konečně to dává smysl. Díky.
Joker
Profil
David1256:
No prosím :-)
Pak se z toho dá vyrobit i to pole:
for (var i = 1; i <= pocet; i++) {
  nazevCanvasu[i] = new Raphael(document.getElementById('nazevCanvasu' + i), 300, 300);
}
David1256
Profil
Joker:
Jj, to už mi je jasné.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: