Autor Zpráva
Joan
Profil
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
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
Joan:
Skús to nejako preformulovať, doplniť, zjednodušiť, …
Asi nikto nerozumie, čo vlastne chceš.
Joan
Profil
_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
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
_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
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
_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;
nenastaví začátek v pravém dolním rohu. Ráno bývá moudřejší večera, tak přeju dobrou noc na Slovensko :-)
Joan
Profil
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";
podle width nadpisu id="h1" a podle paddingu.
aby to jakžtakž chodilo.
Neumím ale kreslit horní rámování zprava doleva, přičítání
bod.width += -5
vykreslilo svislou čárku 1x3 px a konec.
Co prosím dělám špatně?
_es
Profil
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
_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;
Proč výška není nulová (bez border samozřejmě)? Díky moc za objasnění!

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);
                              } 
       }  

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:

0