Autor | Zpráva | ||
---|---|---|---|
Joan Profil |
#1 · Zasláno: 16. 11. 2010, 13:39:03
Myslím opravdu vlastnosti, nikoliv proměnné. Mám funkci, v jejímž těle budou čtyři funkce (zatím válčím se dvěma...) a každá vnitřní funkce má za úkol nastavit trochu jinou vlastnost proměnné var bod deklarované vně těchto čtyř funkcí, ale uvnitř hlavní funkce přiřazené do onclicku. V kostce:
function hlavni(co) { var bod = document.getElementById(co); function prvni() { bod.vlastnost1; if(bod.vlastnost1 >= neco) { dalsi_kod... } } function druha() { //alert v tomto miste vyskočí okamžitě po onclicku - pročpak? bod.vlastnost2; if(bod.vlastnost2 >= neco_jine) { dalsi_kod... } } function treti() { atd. } } Funkci hlavni mám přiřazenou do onclicku v inputu a potřebuji docílit, aby se mi všechny čtyři vnitřní funkce nastartovaly postupně a prováděly kód taky jedna za druhou, ne na přeskáčku - protože třeba zkušební alert uvnitř druhé funkce se zobrazil okamžitě po kliknutí, tak dostávám dojem, že s výše uvedeným způsobem nepochodím. Poradíte mi prosím, jak naložit s proměnnou "var bod", aby se o její měněné vlastnosti podělily POSTUPNĚ všechny čtyři vnitřní funkce? Děkuji předem :-) |
||
ShiraNai7 Profil |
#2 · Zasláno: 16. 11. 2010, 16:34:37
Nějak takto:
function prvni(co) {alert('prvni');} function druha(co) {alert('druha');} function treti(co) {alert('treti');} document.getElementById('test').onclick = function() { prvni(this); druha(this); treti(this); } |
||
_es Profil |
#3 · Zasláno: 18. 11. 2010, 10:54:20
Joan:
Skús to nejako preformulovať, doplniť, zjednodušiť, … Asi nikto nerozumie, čo vlastne chceš. |
||
Joan Profil |
#4 · Zasláno: 18. 11. 2010, 15:39:57 · Upravil/a: Joan
_es:
"Asi nikto nerozumie, čo vlastne chceš. " I to je možné :-)) Já se jednoduše pokouším o stvoření funkce, která by pomalu orámovala nadpis. Dosáhla jsem nejednou docela zajímavých výsledků, leč nikdy ne takových o jaké se snažím. Například: Příklad1 Příklad2 Příklad3 Příklad4 Příklad5 Jakžtakž dám dohromady orámování spodku a pravého okraje nadpisu, ale horní aby šel správným směrem a ve správné tloušťce zatím ne a ne dát dohromady. Taky si nejsem jistá, zda mám po každé proběhnuté čáře používat clearInterval anebo až úplně nakonec po orámování celého nadpisu. No trochu (dost) jsem se do toho "začárovala"... |
||
_es Profil |
#5 · Zasláno: 18. 11. 2010, 16:27:09
Joan:
„Já se jednoduše pokouším o stvoření funkce, která by pomalu orámovala nadpis.“ Základná štruktúra by mohla byť asi takáto: nejakýElement.onclick = function() { definície premenných, ktoré "uvidia" aj funkcie vnorené v tejto funkcii. for(var t = začiatok; t < koniec; t += krok) setTimeout(funkciaPomalyOrámujúcaNadpis, t); function funkciaPomalyOrámujúcaNadpis(){nejaký kód} } Začiatok , koniec a krok sú vhodne zvolené časy v milisekundách. Či to "pomalé orámovanie" spravíš pomocou jednej vnorenej funkcie, ktorá postupne orámuje všetky strany, alebo štyrmi funkciami, každá pre jednu stranu, záleží na tebe. Ak by to bolo štyrmi funkciami, tak stačí len namiesto jedného cyklu for použiť cykly štyri a vhodne upraviť začiatky a konce časovania.
|
||
Joan Profil |
#6 · Zasláno: 20. 11. 2010, 23:51:07 · Upravil/a: Joan
_es:
Díky! Pochopila jsem, jak to myslíš a orámování dole je v pořádku. Když jsem k tomuto kodu jako pokračování připojila další FOR cyklus na orámování nahoru, nestačila jsem se divit! Jakto, že napřed se nakousne druhý FOR cyklus, nedokončí a až potom se spustí ten první? A navíc se utne příliš brzy? Různým zkoušením nastavení vhodných časů jsem docílila i kmitání, jakoby se funkce nemohla rozhodnout, na kterou stranu teda začne s obkreslováním. Schválně jsem nastavila jinou barvu pro každý směr. Zjistila jsem, že hodnoty v jednom FOR cyklu ovlivňují (negativně) hodnoty v druhém FOR cyklu. Jak je toto možné?! Jako "kreslicí" obrázek jsem použila 1x1 px pruhledný GIF. Přiznám se, vůbec nemám ponětí, proč ty FOR cykly nekreslí podle pořadí v kódu... |
||
_es Profil |
#7 · Zasláno: 21. 11. 2010, 00:08:49
Joan:
„Jakto, že napřed se nakousne druhý FOR cyklus, nedokončí a až potom se spustí ten první? A navíc se utne příliš brzy?“ Tie cykly sa samozrejme najprv dokončia. V nich sa však len nastaví, že v istých časových okamihoch, až po dokončení tých cyklov, sa majú spustiť tie funkcie v prvom argumente volania funkcie setTimeout .
Takže, ak má druhý cyklus začiatok menší ako koniec prvého cyklu, tak (asi) nastane to "kmitanie" (nechce sa mi čítať tvoje kódy).
|
||
Joan Profil |
#8 · Zasláno: 21. 11. 2010, 00:22:01
_es:
Já jsem trdlo, no samozřejmě máš pravdu :-) !! Už je to mnohem lepší Jen musím ještě vykoumat, jak zajistit, aby se svislá čára spustila z bodu, kde skončí vodorovná. Zatím mi border.style.right = 0; |
||
Joan Profil |
#9 · Zasláno: 22. 11. 2010, 00:37:55
I vytvořila jsem 4 FOR cykly pro každou stranu zvlášť a zjišťuji, že opravdu nedokážu tomu jednopixelovému puntíku, který má za úkol obkreslit všechny 4 strany nadpisu, vnutit pozici
border.style.right = 0; Levý dolní a levý horní začátek není problém. Ale cokoli na pravé straně se nechytá. Musela jsem nastavit border.style.left = 198+"px"; aby to jakžtakž chodilo. Neumím ale kreslit horní rámování zprava doleva, přičítání bod.width += -5 Co prosím dělám špatně? |
||
_es Profil |
#10 · Zasláno: 22. 11. 2010, 09:33:08
Joan:
> přičítání > bod.width += -5 > vykreslilo svislou čárku 1x3 px a konec. > Co prosím dělám špatně? Obrázok so zápornou šírkou prehliadač obvykle vykresľuje naozaj "špatne" :-) |
||
Joan Profil |
#11 · Zasláno: 22. 11. 2010, 10:34:28 · Upravil/a: Joan
_es:
"Obrázok so zápornou šírkou prehliadač obvykle vykresľuje naozaj "špatne" :-)" No to byl spíš už zoufalý nápad, jak prohlížeč přimět vykreslovat doleva... Předpokládala jsem, že když nadřazenému prvku h1 nastavím relativní pozicování a malinkému obrázku IMG, zodpovědnému za orámování, absolutní pozici, tak že když nastavím jako výchozí bod pravý horní roh, vykreslování šířky že začne v relativně ohraničeném prostoru (rodiče), tj. jediná možnost je doleva. A houby, prohlížeč zřejmě používá jinou "logiku" :-( EDIT: mám v jedné knížce kód, který nechává létat malý obrázek v prostoru a když narazí na pravou stranu okna, kladná inkrementace se změní na zápornou a obrázek letí doleva. Já se vlastně pokouším o totéž, ale mně to nefunguje. Proč? Když přidám další mikroobrázek stylem: <h1 id="h1"><img id="cara" src="pruhledny.gif"><img id="carka" src="pruhledny.gif">První nadpis</h1> tak už mi to rámuje doleva ale nerozumím tomu, proč po druhém spuštění (bez refresh) jede modrá čára tentokrát zleva doprava, když poprvé zprava doleva. Co se mi tam bije? EDIT2: Rozhodla jsem se, že to orámování prvku nechám takto, protože bych nad tím strávila mládí :-) Mám už jenom poslední prosbu o vysvětlení: proč se při dolním a prvotním orámování bere jako výška čáry ta zvýrazněná z 15.řádku (tj 5px), tj. až z v pořadí DRUHÉ funkce, přestože mám na samém začátku deklarováno bod.height = 0; function oramuj(co, maxWidth, maxHeight ) { var bod = document.getElementById(co); bod.style.border = "1px dotted blue"; var i = setInterval(doprava, 50); function doprava() { //rozjede dolni oramovani zleva doprava bod.height = 0; bod.width += 5; if(bod.width >= maxWidth) clearInterval(i); } var k = setInterval(nahoru, 50); //bod.style.top = 0; ramuje napred nahore function nahoru() { bod.width += 0; bod.height += 5; if(bod.height >= maxHeight) clearInterval(k); } } |
||
Časová prodleva: 13 let
|
0