Autor Zpráva
camo
Profil *
Prosím vás ak môžte pozrite sa mi na toto!
Je to úplne jednoduchučký skriptík.
Mám tu takú mini fotogalériu na kt. robím pokusy.
Je tam obrazovka so zväčšenou fotografiou a pod ňou mám tlačítka pre ktoré píšem funkciu P().
Po nájazde myšou nad šípku vľavo(ostatné ešte nefungujú) by sa mala fotka zmeniť pomocou x-1 v indexe fotky z poľa img(pole s fotkami).
Samozrejme mi to nefunguje a hlási mi chybu ,,img[...].src' is null or not an object,,
Neviem či to správne chápem, že funkcia nepozná pole img, ale neviem, ako jej ho predať.
camo
Profil *
<body style="background-color:#d5d6d5; text-align:center;"
      onload="document.getElementById('foto').src=img[2].src">

<script type="text/javascript">

	var img = [];
	    img[0] = new Image();
	    img[0].src = "ema43.png ";
  	    img[1] = new Image();
	    img[1].src = "dlazba43.png ";
	    img[2] = new Image();
	    img[2].src = "ceresne243.png ";
	    img[3] = new Image();
	    img[3].src = "vandali43.png ";
	    img[4] = new Image();
	    img[4].src = "ceresne43.png ";
	    

  function F(x)
     {document.getElementById('foto').src=x};

  function P(z)
		{
		var x=0;
		while (img[x].src == document.getElementById('foto').src)
		{  x++; }
		switch(z) {
			 case 1 : document.getElementById('foto').src=img[x-1].src;
				  document.getElementById('T1').style.visibility="visible";
			 break;

			 case 2 : document.getElementById('foto').src=img[x+1].src;
				  document.getElementById('T4').style.visibility="visible";
			 break;
			  }
		}
						
						
						
</script>

<div style="margin:100px auto;
            width:710px; height:562px;
            background-image:url('litebox.png');
	    text-align:left">
   <img src=" " id="foto"
                style="width:600px; height:450px; margin:25px 20px 0px 87px ">
   <a href="" class="block" style="margin:17px 2px 0px 151px; width:70px; height:50px;"
	      onmouseover="P(1)" ><img id="T1" src="T1.png" style="visibility:hidden"
                                           		    onmouseout="this.style.visibility='hidden'"></a>
   <a href="" style="margin:0px 2px 0px 0px; background-color:red;width:54px; height:45px"></a>

   <a href="" style="margin:0px 2px 0px 0px; background-color:red;width:58px; height:45px"></a>

   <a href="" style="margin:0px 0px 0px; background-color:red;width:67px; height:45px"></a>


</div>

<div id="nahlad" style="margin-top:0px;
                        height:150px; width:100%;
                        overflow:auto;
                        background-color:#d5d6d5" >

<img src="emaM.png" alt="" onmouseover="F(img[0].src)">

<img src="dlazbaM.png" alt="" onmouseover="F(img[1].src)">

<img src="ceresne2M.png" alt="" onmouseover="F(img[2].src)">

<img src="vandaliM.png" alt="" onmouseover="F(img[3].src)">

<img src="ceresneM.png" alt="" onmouseover="F(img[4].src)">


</div>

</body>
_es
Profil
camo
Skús porozmýšľať, aké hodnoty má x vo funkcii P.
camo
Profil *
_es
No pri prvom porovnaní 0
pri ďalšom jedna
a pri case x-1
Tam žiadny problém nevidím, a aj hláška hovorí, že je problém s img a nie s x

Ale dnes som sa dočítal, čosi o špeciálnom predávaní premenných typu pole funkciám. Vraj ich nemožno predávať priamo, ale iba cez argument, pri volaní funkcie. To by znamenalo, že by som mal do onmouseover doplniť ="P(1;img[])". (asi!?)
Ešte som to neskúšal, len som o tom čítal, tak idem na to. Ale teda ako vôbec nechápem, prečo funkcia neni schopná pracovať s poľom.

K tomu x - niečo som prehliadol?
camo
Profil *
Vlastne už sa mi čosi črtá. Na jednom fóre mi jeden človek zistil, že ak používam while musím tam mať != a nie ==.
Potom aj to x vlastne .......?
Idem na to!!!
camo
Profil *
Tak som teda zmenil
while (img[x].src == document.getElementById('foto').src)

na
while (img[x].src != document.getElementById('foto').src)

a script začal reagovať, ALE miesto x-1 robí x-2 (Totiž ja to tak vidím, teda posunie obrázok o dve pozície dozadu(skúšal som aj odstrániť -1, ale to je len ,,na tabletky,,)).

Tak som mu v domnení, že ide o to chybné predávanie premennej typu pole [#4] doplnil ešte:
 function P(z,img)

a
<a href="" class="block" style="margin:17px 2px 0px 151px; width:70px; height:50px;"
          onmouseover="P(1;img[])" ><img id="T1" src="T1.png" style="visibility:hidden"
                                                       onmouseout="this.style.visibility='hidden'"></a>

a script opäť prestal reagovať.

Mám ísť podľa vás k psychiatrovi?!
WanTo
Profil
Mám ísť podľa vás k psychiatrovi?!
Mám jednoho známého psychiatra, chceš na něj kontakt? Ale jinak docela pomáhá vzít si tužku a papír a pořádně si všechno promyslet, než vůbec začneš psát kód. Vážně :-)
camo
Profil *
WanTo
A bol by v tom nejaký zásadný rozdiel?
WanTo
Profil
Kdyby sis to předem promyslel, tak by tě třeba napadlo, že si můžeš do nějaké proměnné uložit index právě zobrazené fotografie. Odpadnul by ti tím ten while cyklus, do kterého ses očividně zamotal, a algoritmus by pracoval rychleji (z hlediska asymptotické složitosti).

Jinak ti doporučuju používat srozumitelnější názvy funkcí a proměnných, než jsou F, P, x, z - jinak se za měsíc podíváš na svůj skript a vůbec nebudeš tušit, co má dělat.
camo
Profil *
WanTo
To s tým indexom ma napadlo, ale s takou metódou som sa nikde pri poliach nestretol. Pre objekt strink existuje str.indexOf().
Ale bol to aj môj zámer, chcel som to robiť cez cykly. Veď vidíte, že som z toho na lopúchy!
WanTo
Profil
Proč to dělat jednoduše, když to jde složitě.

Tady máš návod:
1. Uděláš si pole obrázků, případně jejich adres (to máš).
2. Vytvoříš si proměnnou, do které si uložíš index aktuální fotky.
3. Při kliknutí na tlačítka "další" a "předchozí" změníš index fotky o ±1 (zkontroluješ si samozřejmě, aby ses nedostal mimo pole) a změníš adresu obrázku #foto - získáš z pole[index].
4. U náhledů fotek nebudeš mít jako parametr callback funkce adresu fotky, ale její index. Při najetí myší na náhled nastavíš index aktuální fotky na hodnotu podle náhledu a zase změníš adresu obrázku #foto.

Jednoduché, funkční, bez cyklů.
Chamurappi
Profil
Reaguji na WanTa:
jinak se za měsíc podíváš na svůj skript a vůbec nebudeš tušit, co má dělat
Tím spíš, když chce, aby se na ten skript koukal někdo jiný.


Reaguji na cama:
Tam žiadny problém nevidím, a aj hláška hovorí, že je problém s img a nie s x
Ta hláška, ač to tak na první pohled nevypadá, ti ve skutečnosti říká, že ten img[...] neexistuje. Tedy, že pracuješ s prvkem pole, který neexistuje. Kdyby sis někde nechal vypisovat „x“, všiml by sis toho.

Ale dnes som sa dočítal, čosi o špeciálnom predávaní premenných typu pole funkciám.
Kde? O žádném speciálním předávání nevím.

onmouseover="P(1;img[])"
Jak tě napadlo dát tam středník? Viz povídání o funkcích.

Mám ísť podľa vás k psychiatrovi?!
Bereš si moc velká sousta.
camo
Profil *
Takže problém je vyriešený!
Vďaka človeku kt. si hovorí stenley z fóra www.pcforum.sk

Chamurappi

1. ako to, že zrazu x existuje. Teda to podľa môjho zdeptaného názoru nebolo v x.
2. buď na intervale.cz, alebo na Linuxsofte môžem upresniť. Je ale možné, že to bolo písané okolo roku 2001. A tiež platí, že topiaci sa aj slamky chytá.
3. No to aby si JS ani náhodou nemyslel, že je to desatinná čiarka. Takto som to dokonale ošetril. .-)
4. To bol len taký básnický obraz. Už mi je lepšie. Vďaka!

WanTo

To mám na celý deň/týždeň program. Ale myslel som, že index sa bude získavať nejakou metódou (ak je posledná veta mimo, tak to bude tým, že som to ešte nespracoval).
A samozrejme moc ďakujem, za čas a námahu.
camo
Profil *
Chamurappi
„Ale dnes som sa dočítal, čosi o špeciálnom predávaní premenných typu pole funkciám.“
Kde? O žádné speciálním předávání nevím.


Tu: http://www.linuxsoft.cz/article.php?id_article=271

A stavím sa o štyri sušené lopúchy, že som to zle pochopil!!!
WanTo
Profil
„onmouseover="P(1;img[])"“
Jak tě napadlo dát tam středník? Viz povídání o funkcích.
3. No to aby si JS ani náhodou nemyslel, že je to desatinná čiarka. Takto som to dokonale ošetril. .-)


Tak tohle si vytisknu a nechám zarámovat :-)
camo
Profil *
WanTo
A ja vám zaplatím náklady s tým spojené (papier, inkoust, elektrinu). Pošlite faktúru!
WanTo
Profil
Já hlavně doufám, že jsi to s tou desetinnou čárkou nemyslel vážně...
camo
Profil *
WanTo
V skutočnosti hej, veď funkcii sa predsa dajú predávať aj desatinné čísla, nie? Samozrejme, že v spojitosti s img to postráda zmysel, ale ako inak sa to rieši pri desatinných číslach. V tutoriáloch sa väčšinou používajú celé čísla, tak som to trochu ,,domyslel,,.
WanTo
Profil
Tak samozřejmě, že se používají desetinná čísla. Ovšem programovací jazyky (ty běžně používané) jsou založené na angličtině, takže se používá desetinná tečka. Ach jo, já si to fakt dám zarámovat.
Chamurappi
Profil
Reaguji na cama:
Tu: www.linuxsoft.cz/article.php?id_article=271
A stavím sa o štyri sušené lopúchy, že som to zle pochopil!!!
Asi ano. Nevím, jak jinak to správně vysvětlit, aniž bych tě nasměroval potenciálně špatným směrem, takže ti jen doporučím, abys tenhle poznatek o „speciálním předávání polí“ prozatím vypustil z hlavy. Žádná speciální syntaxe se k němu neváže.
camo
Profil *
Chamurappi
Ok, púšťam z hlavy a to by bolo pre toto vlákno všetko.

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