Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 19. 5. 2010, 09:00:32
Dobrý den
Měl jsem tady v diskuzi dotaz, při kterým jsem tvořil script. Omlouvám se že zakládám další téma, ale když je v diskuzi moc příspěvků, tak přestávají chodit reakce, ale hlavně tento dotaz myslím nesouvisí s předchozí debatou (i když se jedná o stejný script) Vytvořil jsem scrip na plynulou výměnu obr. (celých div). Výsledný script je na konci diskuze. http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=110254 Funguje výborně, ale neznám souvislosti. 1.Nevím jestli to není "prasácký script" a jestli jej mohu s klidným svědomým používat na netu. 2.Nevím co to bude dělat, když někdo bude mít vypnutý javascript 3.Hlavně nevím, jestli to nebude velké zatížení na PC. 3a. událost napojím např. na klik a je to v poho. ¨Script je volán jen jednou 3b. onload - takhle script volá třeba 10 div současně. Mně to funguje, ale můžu to takto používat? |
||
_es Profil |
#2 · Zasláno: 19. 5. 2010, 09:30:59
Jcas:
Asi sa treba hlavne snažiť pochopiť, ako ten skript funguje, čo by snáď u teba mohlo platiť. Menší návrh na zlepšenie: http://diskuse.jakpsatweb.cz/.sandbox/?action=vthread&forum=8&topic=106539#eval |
||
Chamurappi Profil |
#3 · Zasláno: 19. 5. 2010, 10:12:18
Reaguji na Jcase:
ad 1) Viz _es. Myslím, že ten skript je napsaný zbytečně složitě a nešikovně, ale nemám chuť ho přepisovat. ad 2) Nebude dělat vůbec nic. Když není zapnutý JavaScript, nevykonává se JavaScript :-) … můžeš si to zkusit. ad 3) Máš tam nulový delay , ten skript se bude vykonávat maximální rychlostí, jakou mu počítač/prohlížeč dovolí, což mi připadá jako nesmysl.
|
||
Jcas Profil * |
#4 · Zasláno: 19. 5. 2010, 11:19:39
Ten nulový delay máš na mysli při samotném volání funkce alpha_show?
|
||
_es Profil |
#5 · Zasláno: 19. 5. 2010, 11:37:44
Jcas:
Myslí lokálnu premennú delay vo funkcii AlphaFade.alpha_show , ktorú máš nastavenú na 0 a predávaš ju do rôznych volaní setTimeout .
Prečo sa to celé nesnažíš rozmeniť "na drobné" a pochopiť, ale stále tu dávaš na posúdenie nejaký nevzhľadný kus kódu? Mimochodom, vzniká ti pri tom nedeklarovaná globálna premenná alphac .
|
||
Jcas Profil * |
#6 · Zasláno: 19. 5. 2010, 12:55:21
Nechápu
viz "Prečo sa to celé nesnažíš rozmeniť "na drobné" a pochopiť, ale stále tu dávaš na posúdenie nejaký nevzhľadný kus kódu? " Od počátku se snažím pitvat script řádek po řádku a pochopit, co kterej příkaz dělá. Co dělám špatně? |
||
_es Profil |
#7 · Zasláno: 19. 5. 2010, 13:24:01
Jcas:
„Od počátku se snažím pitvat script řádek po řádku a pochopit, co kterej příkaz dělá. Co dělám špatně?“ A čo ti teda bráni aplikovať všetky tie rady? Ak by si si trochu lepšie naštudoval syntax JS z nejakej knihy, alebo aj napríklad z dokumentácie Mozilly - odkazy v kóde, tak by si nemusel tak tápať. |
||
Jcas Profil * |
#8 · Zasláno: 19. 5. 2010, 13:54:05
Takže nevhodně použité setTimeout.
Nesmyslně definováno delay na 0. A je chyba, že tam je nedeklarovaná proměná. = prostudovat dokumentaci a identifikovat, proč jsem udělal tyto chyby (možná jsem část převzal z nabídnutého kódu jako vzoru). Prostudovat dokumentaci, jak se to dělá správně. Už mi chybí teda pouze pořádná ČESKÁ dokumentace. |
||
Witiko Profil |
#9 · Zasláno: 19. 5. 2010, 19:21:34 · Upravil/a: Witiko
Jcas:
„Už mi chybí teda pouze pořádná ČESKÁ dokumentace.“ Raději se začni připravovat na to, že u většiny programovacích jazyků nalezneš dokumentaci pouze v angličtině. Chceš se učit programovací jazyky, začni s normálním jazykem, principy jsou podobné. Je tu pak samozřejmě několik knih, ale ty rychle zastarávají, pokud vím není na trhu o javascriptu momentálně nic aktuálního. Okomentovaný script: <script type="text/javascript"> var AlphaFade = { alpha_show : function (kdo, num, pocet) { var id = kdo + num; //odchycení id objektu, který chcu měnit var e = document.getElementById(id).style; if (e.opacity == 0.1 || e.filter == "alpha(opacity=10)") //podmínka pro zjištění, jestli budu zeslabovat, nebo zesilovat { from = 0; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ to = 100; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ direction=1; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ } else { from = 100; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ to = 0; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ var direction=-1; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ } // if (!duration) duration = 3000; // if (!from) from = 100; // if (!to) to = 100; var totalframes = 100; var step = 22; var delay = 0; var frame = 0; // pryč s tímhle alphac=from; // !! NEDEKLAROVANÁ GLOBÁLNÍ PROMĚNNÁ, pokud má jít o proměnnou lokální dostupnou pouze uvnitř funkce, definovat pomocí var keywordu. Pokud globální definovat pomocí var keywordu mimo funkci. while (frame < totalframes) // for(var frame = 0; frame < totalframes; frame++) { frame++; // pryč s tímhle alphac=alphac+(1*direction); // alphac += direction; setTimeout("AlphaFade.set_alpha('"+id+"',"+alphac+")", delay); /* (function(id, alphac) { window.setTimeout(function(){ AlphaFade.set_alpha(id,alphac); }, delay); })(id, alphac); Lexikální uzávěr, způsobí, že funkce bude pracovat s proměnnou alphac předanou jí jako argument, ne alphac, která se během cyklu mění. */ delay=delay+step; } setTimeout("AlphaFade.set_alpha('"+id+"',"+to+");", delay); /* (function(id) { window.setTimeout(function(){ AlphaFade.set_alpha(id, to); }, delay); })(id); */ if (alphac == 100 && num == '1') //podmínka odchytí okamžik, kdy se opět zviditelnil první objekt { num++; while (num < pocet) //cyklus vrátí vše do původního stavu // for cyklus prosím? { var id = kdo + num; // lokální proměnná id již je deklarována, proč ji deklarujeme znovu... a několikanásobně? setTimeout("AlphaFade.set_alpha('"+id+"', "+alphac+");", delay); /* (function(id) { window.setTimeout(function(){ AlphaFade.set_alpha(id, alphac); }, delay); })(id); */ num++; } setTimeout("AlphaFade.alpha_show('"+kdo+"',"+1+", "+pocet+");", 3000); /* (function(kdo, pocet) { window.setTimeout(function(){ AlphaFade.alpha_show(kdo, 1, pocet); }, delay); })(kdo, pocet); */ } else //při všech ostatních situací se vola funkce change { setTimeout("AlphaFade.change('"+kdo+"', "+num+", "+pocet+");", delay); /* (function(kdo, num, pocet) { window.setTimeout(function(){ AlphaFade.change(kdo, num, pocet); }, delay); })(kdo, num, pocet); */ } }, set_alpha : function (obj,opacity) //funkce, která definuje opacity objektu na základě parametru { // který obdrží při volání. var object = document.getElementById(obj).style; object.opacity = (opacity / 100); object.MozOpacity = (opacity / 100); object.KhtmlOpacity = (opacity / 100); object.filter = "alpha(opacity=" + opacity + ")"; }, change : function (kdo,num,pocet) //funkce, která změní id, aby jsme mohli provádet show { //s dalším objektem num ++; if (num<pocet) //zjistíme, jestli jsou už všechy objektu zprůhledněny, { //kromě posledního setTimeout("AlphaFade.alpha_show('"+kdo+"', "+num+", "+pocet+");", 3000); /* (function(kdo, num, pocet) { window.setTimeout(function(){ AlphaFade.alpha_show(kdo, num, pocet); }, 3000); })(kdo, num, pocet); */ } else { //pokud ano, zavolá se show tak, aby se zviditelnil první objekt. var id = kdo + '1'; setTimeout("AlphaFade.set_alpha('"+id+"', 10);", 3000); setTimeout("AlphaFade.alpha_show('"+kdo+"', "+1+", "+pocet+");", 3000); /* (function(id, kdo, pocet) { window.setTimeout(function(){ AlphaFade.set_alpha(id, 10); AlphaFade.alpha_show(kdo, 1, pocet); }, 3000); })(id, kdo, pocet); */ } } } </script> Definice intervalů a timeoutů - nedefinovat funkci pomocí řetězce, v případě potřeby je vždy možné použít lexikální uzávěr v případě že je třeba zachovat pro funkci předávanou timeoutu / intervalu proměnné v tom stavu v jakém byly po zavolání funkce. Mé komentáře ale neřeší celkový problém scriptu, kterým je špatný návrh. Reference na veškeré funkce jsou uloženy v prostém objektu AlphaFade, nicméně objektovost vůbec nevyužívají a pracují s globálními proměnnými, což ve mně vyvolává tíživý pocit, že script nemůže obsluhovat více případů současně. Prasácké je rovněž řešení číslování divu, které by šlo krásně "neprasácky" vyřešit předáním názvů v poli, kdyby byl script napsán objektově. |
||
_es Profil |
#10 · Zasláno: 19. 5. 2010, 20:33:43
Witiko:
„Je tu pak samozřejmě několik knih, ale ty rychle zastarávají, pokud vím není na trhu o javascriptu momentálně nic aktuálního.“ Sú aj v češtine veľmi dobré a aktuálne knihy. Staršia kniha, už netlačená, v ktorej je podrobne vysvetlená syntax samotného jadra JavaScriptu, môže byť užitočnejšia, než "aktuálna" kniha so zbierkou aktuálnych skriptov. |
||
Witiko Profil |
#11 · Zasláno: 19. 5. 2010, 20:39:40
_es:
„môže byť užitočnejšia, než "aktuálna" kniha so zbierkou aktuálnych skriptov“ Souhlasím, on ale sháněl dokumentaci v češtině. Aktuálně neznám knihu, která by zahrnovala veškeré funkce aktuální specifikace ECMA. |
||
_es Profil |
#12 · Zasláno: 19. 5. 2010, 20:49:03
Witiko:
„Aktuálně neznám knihu, která by zahrnovala veškeré funkce aktuální specifikace ECMA.“ Nemáš to trochu popletené? O "aktuálnom" ECMA-262 3. edície je veľa veľmi starých kníh. |
||
Witiko Profil |
#13 · Zasláno: 19. 5. 2010, 21:18:49 · Upravil/a: Witiko
_es:
„O "aktuálnom" ECMA-262 3. edície je veľa veľmi starých kníh.“ Nemýlím li-se, před nedávnem (v dubnu?) již byla vydaná verze ECMA-262-5 ke které je již dostupná dokumentace, ačkoliv zatím nevěřím v podporu prohlížečů. http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf |
||
_es Profil |
#14 · Zasláno: 19. 5. 2010, 21:34:47
Witiko:
„již byla vydaná verze ECMA-262-5 ke které je již dostupná dokumentace, ačkoliv zatím nevěřím v podporu prohlížečů.“ Takže o tú asi Jcasovi nešlo. Naozaj ti jasné, čo je ECMA Script a čo ostatné veci? |
||
Witiko Profil |
#15 · Zasláno: 19. 5. 2010, 21:55:34 · Upravil/a: Witiko
„Naozaj ti jasné, čo je ECMA Script a čo ostatné veci?“
ECMA Script je aktuálně přijat jako standard ve verzi ECMA-262-3, ano. Nicméně očekávám, že dojde k přechodu na verzi ECMA-262-5, pokud je tohle to, co jsi myslel. Mluvil jsem ale i o nastavbových funkcích, které přinesl Javascript 1 - 2. |
||
_es Profil |
#16 · Zasláno: 20. 5. 2010, 06:36:22
Witiko:
„pokud je tohle to, co jsi myslel“ Nie, myslel som to, že ECMA script je univerzálny jazyk nezávislý od prehliadača. A tie aktuálne knihy sa zaoberajú práve tými aktuálnymi ostatnými vecami - napríklad DOM, BOM a pod., s ktorými ECMA nemá nič spoločné. |
||
Jcas Profil * |
#17 · Zasláno: 20. 5. 2010, 08:30:36
Děkuji mockrát
Takže jdu studovat a zkusím to znova od začátku. |
||
Časová prodleva: 14 let
|
0