[ 1boki1 @ 09.09.2015. 05:46 ] @
Apsolutni sam pocetnik u JS tako da se nadam da cete me razumeti.
Uporno sam pokusavao da nadjem gresku i nista.Nadam se da cete mi ukazati na istu.Hvala unapred.

Code:

<!doctype html>
<html>
<head>
</head>
<body>
<img id="slika" src="a.jpg" >
<div id="tekst">Tekst za slajd</div>
<button type="button" onclick="start()">start</button>
<button type="button" onclick="stop()">stop</button>
<script>
function start() {
var slika, timeId ;
var nizSlika = [] ;
    nizSlika[0] = "a.jpg" ;
    nizSlika[1] = "b.jpg" ;
    nizSlika[2] = "c.jpg" ;
    nizSlika[3] = "d.jpg" ;
document.getElementById("slika").src = slika ;  
slika = nizSlika[0] ;

    if (slika == nizSlika[0]) {
        timeId = setTimeout("slika = nizSlika[1] ",2000) ; 
    }
    else if (slika == nizSlika[1]) {
        timeId = setTimeout("slika = nizSlika[2]",2000) ; 
    }
    else if (slika == nizSlika[2]) {
        timeId = setTimeout("slika = nizSlika[3]",2000) ; 
    }
    else 
        timeId = setTimeout("slika = nizSlika[0]",2000) ; 
}
</script>
</body>
</html>

[ Shadowed @ 09.09.2015. 07:21 ] @
Da ne zalazimo sad u to da je mogao bolje ceo kod da se organizuje i drzimo se konkretnog problema, setTimeout prihvata funkciju koju ce izvrsiti kada istekne zadato vreme. Ti mu prosledjujes string (to sto je u stringu linija koda je nebitno). Dakle, umesto:
setTimeout("slika = nizSlika[1] ",2000)
bi trebalo biti:
setTimeout(function() { slika = nizSlika[1]; },2000)
[ 1boki1 @ 09.09.2015. 08:50 ] @
Jos ranije sam probao tako preko f-je ali ni tako nije radilo.
Nasao sam negde na netu da umesto funkcije prvi argument metode seTimeout() moze da bude JS izraz(moguce da je ovo zastarilo) pa sam zato stavio izraz.
Prilicno sam siguran da greska nije sintaksna jer sam nekoliko puta pregledao kod.
Problem je ocigledno u organizaciji kod.
Shadowed hvala puno na odgovoru i molim te za predlog kako bolje da organizujem kod.Hvala.
[ dusans @ 09.09.2015. 09:37 ] @
Nije problem u toliko organizaciji koliko u samoj logici koda.

Tvoj string u timeout-u je sintaksno ispravan, međutim,
pored činjenice da ne radi ništa osim dodele, usput i tu dodelu
ne radi kako treba pošto se NE izvršava u kontekstu tvoje start funkcije
a samim tim i tvojih slika i nizSlika varijabli.

Ovo što ti je Shadowed napisao je veliki korak napred i moralo bi da radi,
međutim ne znam šta očekuješ da će se desiti kada se izvrši dodela slika = nizSlika...?
Neće ti se promeniti src slike i promeniti sliku ako si to očekivao...

Ali evo ti nešto što ti treba otprilike:
http://jsfiddle.net/soaa346r/3/





[ Shadowed @ 09.09.2015. 10:03 ] @
Citat:
1boki1: Shadowed hvala puno na odgovoru i molim te za predlog kako bolje da organizujem kod.Hvala.


Dusans ti je u sustini odgovorio na ovo. Samo bih, posto pretpostalvjam da si pocetnik, dodao da ovo:
slideIndex = ++slideIndex % nizSlika.length;
radi istu stvar kao i ovo (samo krace i malo brze):
Code:
if (slideIndex < (nizSlika.length - 1))
{
    slideIndex++;
}
else
{
   slideIndex = 0;
}



Inace, umesto:
timeId = setTimeout(function () { slideLoop() }, 2000);
moze samo:
timeId = setTimeout(slideLoop, 2000);

jer je slideLoop funkcija i moze se proslediti setTimeout-u. Nema potrebe praviti funkciju koja ce samo pozvati drugu funkciju :) Bar ne u ovom slucaju.
[ 1boki1 @ 11.09.2015. 06:13 ] @
Najpre hvala puno na odgovrima.
F-je rade,nije problem zapamticu kako treba organizovati kod do ispita,ali problem je u tome sto sada ne razumem logiku.

Jasno mi je da se za X promena index-a,promeni X slika ali mi nije jasno kako se slike prikazuju u razmaku u navedenom razmaku(u primeru je to 2sekunde) kada po nekoj mojoj logici setTimeout() metoda govori da se funkcija slideLoop kao njen argument izvrsi nakon dve sekunde.
Po mojoj logici da bi se prikazalo X slika trebalo bi X puta pozvati f-ju setTimeout() iz koda zakljucujem da se f-ja setTimeout() metoda poziva samo jednom jer se start funkcija poziva jednom tj. slideLoop f-ja izvrsava jednom.
Naravno da nije tako jer da je tako skripta ne bi izvrsavala kod koji simulira slajd.

Meni bi bilo logicnije da se u ovom primeru koristi metoda setInterval() koja ce po jednu sliku prikazivati za jednu promenu indexa odnosno za jedno izvrsavanje f-ja start i setTimeout(). Probao sam sa setInterval() i skripta radi izvesno vreme nakon cega dovodi do kraha browsera.
Znaci ne razumem zasto se ovde koristi metoda setTimeout() iako je ocigledno da ona predstavlja ispravan izbpr.

Vise puta sam se ponavljao logiku koju ne razumem.
Nadam se da ste shvatili sta mi nije jasno i da cete pokusati da mi objasniti.
Hvala.




[Ovu poruku je menjao 1boki1 dana 11.09.2015. u 08:20 GMT+1]
[ Shadowed @ 11.09.2015. 07:36 ] @
Svaki put kada se slideLoop pozove, ona, nakon sto promeni sliku, zakaze svoje novo pozivanje 2sec kasnije.
Mozes koristiti setInterval() ali onda izbaci liniju timeId = setTimeout(function () { slideLoop() }, 2000);
samim tim i var timeId postaje suvisna.
setInterval() stavi na samom kraju start() funkcije, posle poziva slideLoop.