Autor Zpráva
Akali
Profil
Ahoj, mám takovýto JS

<script type="text/javascript">
var images = [
{
"src":"images/prave_menu/vb-jamne.jpg",
"width":122,
"height":92
},{
"src":"images/prave_menu/kabiny.jpg",
"width":122,
"height":92
},
{
"src":"images/prave_menu/hriste.jpg",
"width":122,
"height":92
}
];
function gid(id){
return document.getElementById(id);
}

var index = 0;

function loadImage(targetId){
// zjistime kolik je k dispozici obrazku
var imagesCount = images.length;
// vybereme nahodne index jednoho obrazku
index = Math.floor(Math.random() * imagesCount);
// do DIVu vlozime obrazek
gid(targetId).innerHTML = '<a href="' + images[index].link + '"><img src="' + images[index].src + '" width="' + images[index].width + '" height="' + images[index].height + '" /></a>';
}
</script>


a tento HTML
<div class="center-area">
<div id="loadContainer"></div>
<button type="button" value="další" onclick="loadImage('loadContainer');">další</button>
<p>&nbsp;</p>
</div>


Jenže potřebuji, aby tento kód zobrazoval 3 obrázky pod sebou a ne jenom jeden..

Popřípadě, znáte lepší řešení pomocí JS?
->Omlouvám se, ale nevím jak se zvýrazňují kódy
Webb
Profil *
počkat, trošku jsem to nepochopil.. chceš náhodný obrázek ze 3 nebo všecky 3 zobrazit? trošku divné ne? Asi jsem tě nepochopil.
Webb
Profil *
Webb:
pokut chces zobrazit všechny 3 tak použi cyklus
for(var i=1; i<=imagesCount; i++) {
gid(targetId).innerHTML = '<a href="' + images[i].link + '"><img src="' + images[i].src + '" width="' + images[index].width + '" height="' + images[i].height + '" /></a>';
}


ale potom nechapu proč chceš náhodné?
Akali
Profil
Potřebuji totiž 3 náhodné třeba ze 40.. ale ty ostatní tam přidám časem (napsal jsem jenom jak by to mělo vypadat)
JS vůbec neumím, myslel si to takto?
  <script type="text/javascript">
		var images = [
			{
				"src":"images/prave_menu/vb-jamne.jpg",
				"width":122,
				"height":92
			},{
				"src":"images/prave_menu/kabiny.jpg",
				"width":122,
				"height":92
			},
			{
				"src":"images/prave_menu/hriste.jpg",
				"width":122,
				"height":92
			}
		];
		function gid(id){
			return document.getElementById(id);
		}
		
		var index =  0;
		
		function loadImage(targetId){
			// zjistime kolik je k dispozici obrazku
			var imagesCount = images.length;
			// vybereme nahodne index jednoho obrazku
			index = Math.floor(Math.random() * imagesCount);
			// do DIVu vlozime obrazek      
			for(var i=1; i<=imagesCount; i++) {
      gid(targetId).innerHTML = '<a href="' + images[i].link + '"><img src="' + images[i].src + '" width="' + images[index].width + '" height="' + images[i].height + '" /></a>';
      }
}
	</script>
	


Popřípadě, mohl by si přidat celý kód? : )
děkuji
Webb
Profil *
Akali:
pokut chceš vždycky tři tak
for(var i=1; i<=3; i++) {
      gid(targetId).innerHTML = '<a href="' + images[index].link + '"><img src="' + images[index].src + '" width="' + images[index].width + '" height="' + images[i].height + '" /></a>';
      }


ale muze se stat ze se nahodne vyberou stejne
Webb
Profil *
za to "i" v images[i], dej taky index.
Akali
Profil
Bohužel, takto se zobrazuje taky jenom jeden obrázek :(


  <script type="text/javascript">
		var images = [
			{
				"src":"images/prave_menu/vb-jamne.jpg",
				"width":122,
				"height":92
			},{
				"src":"images/prave_menu/kabiny.jpg",
				"width":122,
				"height":92
			},
			{
				"src":"images/prave_menu/hriste.jpg",
				"width":122,
				"height":92
			}
		];
		function gid(id){
			return document.getElementById(id);
		}
		
		var index =  0;
		
		function loadImage(targetId){
			// zjistime kolik je k dispozici obrazku
			var imagesCount = images.length;
			// vybereme nahodne index jednoho obrazku
			index = Math.floor(Math.random() * imagesCount);
			// do DIVu vlozime obrazek      
for(var i=1; i<=3; i++) {
gid(targetId).innerHTML = '<a href="' + images[index].link + '"><img src="' + images[index].src + '" width="' + images[index].width + '" height="' + images[index].height + '" /></a>';
}      }

	</script>
Nox
Profil
Akali:
1) Když v cílovým ID 3x nastavíš img, tak je jasné, že bude jen jedno. Takže před cyklem vymazat a potom += ...nebo jen měnit href/src
2) Funkce se jmenuje loadImage, což by značilo 1 obrázek, měj buď loadImages, nebo asi líp - dej cyklus ven
3) V cyklu nepoužíváš imagesCount...tvorba téhle proměnné je stejně zbytečná, použiješ to jen jednou, navíc .length je vlastnost, ne funkce co by něco počítala, takže rychlé to bude stejně
Webb
Profil *
Nox:
jo tojsem přehledl, tak si udělej třeba tři div

<div id="image_1"></div>
<div id="image_2"></div>
<div id="image_3"></div>

gid(targetId+"_"+i).innerHTML = '<a href="' + images[index].link + '"><img src="' + images[index].src + '" width="' + images[index].width + '" height="' + images[index].height + '" /></a>';


nebo použí to += ale před každým novým cyklem bys musel element promazat aby se ti tam nepřidavaly další.
Akali
Profil
Takže jak by to vypadalo celé dohromady? S JavaScriptem nejsem kamarád :(
Nějak bych to zkoušel, ale zrovna nejsem u svých dat.

Nox: Jsem rád, že mi tady takto radíte, ale asi nemá smysl mi do hlavy cát takovýhle odborný myšlenky. Jak jsem už několikrát napsal, JavaScript vidím 2x za století a nejsem schopnej si kód podle svého poupravovat jako například v php a podobných jazycích, bohužel : (
Webb
Profil *
<script type="text/javascript">
        var images = [
            {
                "src":"images/prave_menu/vb-jamne.jpg",
                "width":122,
                "height":92
            },{
                "src":"images/prave_menu/kabiny.jpg",
                "width":122,
                "height":92
            },
            {
                "src":"images/prave_menu/hriste.jpg",
                "width":122,
                "height":92
            }
        ];
        function gid(id){
            return document.getElementById(id);
        }
        
        var index =  0;
        
        function loadImage(targetId){
            // zjistime kolik je k dispozici obrazku
            var imagesCount = images.length;
            // vybereme nahodne index jednoho obrazku
            index = Math.floor(Math.random() * imagesCount);
            // do DIVu vlozime obrazek      
for(var i=1; i<=3; i++) {
gid(image+"_"+i).innerHTML = '<a href="' + images[index].link + '"><img src="' + images[index].src + '" width="' + images[index].width + '" height="' + images[index].height + '" /></a>';
}      }

    </script>


a toto vložiš do stránky
<div id="image_1"></div>
<div id="image_2"></div>
<div id="image_3"></div>


pokut tu neni nekde jeste chyba tak by to melo jit
Nox
Profil
Webb:
proměnná index se musí naplňovat uvnitř cyklu, jinak se bude používat furt stejná hodnota
Akali
Profil
Nevím proč, ale tento kód (JS + html) - přesně tak, jak si ho napsal, mi nějak nefunguje..
Akali
Profil
Tak už jsem to vyřešil jinak, děkuji pánové ;)
Akali
Profil
Tak jsem to teda nakonec nevyřešil, při nahrání na ic.cz se mi nezobrazují 3 obrázky, ale někdy 2, někdy jeden a někdy dokonce žádný :(

kód

<script type="text/javascript">
            var obrazky = new Array("../images/prave_menu/vb-jamne.jpg", ".../images/prave_menu/hriste.jpg", ".../images/prave_menu/kabiny.jpg");
            document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>");
            document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>");
            document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>");
</script>


Máte nějaké řešení? :( Už jsem jaksi zoufalej
Chamurappi
Profil
Reaguji na Akaliho:
při nahrání na ic.cz se mi nezobrazují 3 obrázky, ale někdy 2, někdy jeden
To vypadá na špatnou cestu k některému z obrázků. Máš správně velikost písmen? Co si slibuješ od těch tří teček?

Mimochodem, zamysli se nad svými výpočty s náhodným číslem. Metoda Math.random() ti vrátí číslo od nuly do jedné, ty ho vynásobíš dvěma, vznikne číslo od nuly do dvou, to zaokrouhlíš na celé číslo — takže z rozsahu 0 až 0.5 vzejde 0, z 0.5 až 1.5 vzejde 1 a z 1.5 až 2 vzejde 2. S padesátiprocentní pravděpodobností vybereš prostřední obrázek, což asi není záměr, ne?

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0