Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 6.010 pregleda

Najnovija ↓

Zasto ne radi setTimeout() metoda 09.09.2015. u 06:46 · pre 135 meseci #1
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>

Re: Zasto ne radi setTimeout() metoda 09.09.2015. u 08:21 · pre 135 meseci #2
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)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Sviđa mi se1
Re: Zasto ne radi setTimeout() metoda 09.09.2015. u 09:50 · pre 135 meseci #3
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.
Re: Zasto ne radi setTimeout() metoda 09.09.2015. u 10:37 · pre 135 meseci #4
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/





Sviđa mi se2
Re: Zasto ne radi setTimeout() metoda 09.09.2015. u 11:03 · pre 135 meseci #5
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.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Sviđa mi se1
Re: Zasto ne radi setTimeout() metoda 11.09.2015. u 07:13 · pre 135 meseci
izmenjeno 1 put, poslednji put 1boki1 11.09.2015. u 08:20
  1. 1boki111.09.2015. u 08:20zapis iz teksta poruke
#6
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.
Re: Zasto ne radi setTimeout() metoda 11.09.2015. u 08:36 · pre 135 meseci #7
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.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme