Kako od ovoga napraviti infinite loop? [Javascript]

Pozdrav,
imam jedan blok koga za kojeg bi zelio da se stalno izvrsava:

// Set the timer
var theDelay = 5;
function timer() {
    setTimeout( function(){
        toggleText();    
    }, theDelay * 1000 );
}
// Call the timer
timer();

// Toggle visibility
function toggleText() {
    document.getElementById("toShow").style.visibility = "visible";
    document.getElementById("toHide").style.visibility = "hidden";
}

Ja sam svasta nesto pokusavao sa while(uvjet){code} ali nije mi bas poslo za rukom, moze li mi netko pomoci?

Nisam te skužio kada želiš da se počne izvršavati? Ako je nakon učitavanja odmah, onda moraš tako i specificirati:

var theDelay = 5;

window.onload = function()
{
    setInterval( function(){
        // tvoj kod
    }, theDelay * 1000 );
}

Da, zelim da se pocme izvrsavati odma po ucitavanju stranice. Kod koji si napisao, hoce li se on samo jedanput izvrsiti ili ce se konstantno izvrsavati?

Da pojasnim, u primjeru vidite da se jednu klasu pretvara u nevidljivu a drugu u vidljivu, i meni je cilj da se to stalno izvrsava : vidljiva - nevidljiva, vidljiva - nevidljiva…

S obzirom na moje skromno poznavanje koncepta programiranja pretpostavljao sam da je potrebno sve staviti u while petlju i dodati neku uvijet zbog kojeg to nikad nece zavrsiti, ali ipak nisam uspio sam to napraviti :blush:

Ponavljat će se kod.
Ti si koristio setTimeout koji se izvršava nakon određenog broja sekundi, umjesto da si koristio setInterval koji se ponavlja za zadani interval.

Evo pa pogledaj, svakih 5 sekundi baca alert koliko je sekundi prošlo:

1 Like

Pokušao sam ovako:

// Set the timer
var theDelay = 2;
window.onload = function(){
function timer() {
    setInterval( function(){
        toggleText();    
    }, theDelay * 1000 );
}
}
// Call the timer
timer();

// Toggle visibility
function toggleText() {
    document.getElementById("toShow").style.visibility = "visible";
    document.getElementById("toHide").style.visibility = "hidden";
}

http://jsfiddle.net/0nweekuL/1/
ali ipak ne radi?

http://jsfiddle.net/n90mygwx/

// Set the timer
var theDelay = 1;
window.onload = function() {
    timer();
}
function timer() {
    return setInterval(
        toggleText,
        theDelay * 1000
    );    
}

// Call the timer
timer();

// Toggle visibility
function toggleText() {
    if (document.getElementById("toShow").style.visibility === "visible") {
        document.getElementById("toShow").style.visibility =  "hidden" }
    else {
        document.getElementById("toShow").style.visibility = "visible";
    }
    
    if ( document.getElementById("toHide").style.visibility === "hidden") {
        document.getElementById("toHide").style.visibility = "visible" }
    else {
        document.getElementById("toHide").style.visibility = "hidden";
    }
}

Pogledaj razliku.

2 Likeova

@creatifcode Hvala!!

no frx. :wink: 20 znakova

Radi ali pokušaj shvatiti što radi ta toggleText funkcija koja se ponavlja.

Hm

// Toggle visibility
    function toggleText() {
        document.getElementById("toShow").style.visibility = "visible";
        document.getElementById("toHide").style.visibility = "hidden";
    }

Mislim da to radi na ovaj nacin: program ulazi u toggletext funkciju, dohvaća element s ID-om “toShow” i dodaje mu style visibility = visible, dok s elementom ID-a “toHide” radi istu stvar samo što dodaje hidden style. Problem je očito u tome što će na elementu “toShow” ostati visibility: visible i na “toHide” visibility: hidden i funkcija će svaki put to ponovo dodavati bez provjere šta je i kako je.

Creatifcode mi je dao rješenje, ali ipak kada ga implementiram na stranicu gdje mi je potreban dešava se nekakav bug( obratite pažnju na cover dio stranice, tu bi se tekst trebao pojavljivati i nestajati) : http://traveltodalmatia.com/huddleup/ Iz nekog razloga, elementi nisu jednako dugo vidljivi/skriveni.

To ti se dogadja jer pozivas funkciju dva puta, na ‘onload’ event i odmah po ucitavanju JS-a.

Izbaci ovo iz koda:

// Call the timer
timer();

ili ovo, ovisi o potrebi:

window.onload = function() {
    timer();
}

Uglavnom, ne smije biti i jedno i drugo.

1 Like

Eee sad radi odlično, hvala @apazinjan !!

Pokušavam istu stvar izvest, samo ovaj put sa 6 elemenata umjesto s 2. Ideja je i dalje ista, dok je jedan element vidljiv svi ostali trebaju bit nevidljivi: http://jsfiddle.net/rdz8941j/
Ne radi baš najbolje haha, vjerojatno sam nešto u sintaksi zeznuo…

Kad vec koristis jQuery na stranici, iskoristi ga i ovdje: http://jsfiddle.net/rdz8941j/1/

@apazinjan hvala jos jednom :slight_smile:

Pogledajte, evo tog koda iskorištenoga i u praksi : http://traveltodalmatia.com/huddleup/

1 Like

ja sam ga iskoristio na www.oklop.me :slight_smile: super ti je ovo ja bih stavio jos malo veci tekst samo

1 Like

Hvala ti, vidim i ti si ga iskoristio na vrlo zgodan nacin :wink:
Evo povecat cu ga malo

Nice.
20 i nesto znakova