forum speccy.pl
ZX Spectrum => RÓŻNOŚCI => Wątek zaczęty przez: tdu w 2018.01.12, 18:46:22
-
Jestem w tym temacie poczatkujący, prosze o pomoc w opanowaniu skryptu
function zmienslajd()
{
if (n==0) {losowe(zakres);}
numer = tablica[n]; k=n+1; setTimeout(slajd(k, numer), 1000);
n++; numer = tablica[n]; k=n+1; setTimeout(slajd(k, numer), 1000);
n++; numer = tablica[n]; k=n+1; setTimeout(slajd(k, numer), 1000);
n++; numer = tablica[n]; k=n+1; setTimeout(slajd(k, numer), 1000);
n++; numer = tablica[n]; k=n+1; setTimeout(slajd(k, numer), 1000);
if (n>3) {n=0;}
setTimeout(zmienslajd,3000);
}
funkcja zmien slajd wyswietla na stronie piec malych zdjec
po piatym jest przerwa setTimeout(5000) ktora działa, po 5 sekundach wyswietlane jest kolejne 5 obrazków.
natomiast nie działa setTimeout(1000), które ma spowodować wyswietlanie obrazków po kolei.
gdzie tkwi błąd ?
albo jak te opóznienie inaczej zrealizować ?
-
Nie uruchamiałem kodu ale wygląda na to setTimeouty uruchomią się jednocześnie, ponieważ kolejna linia nie czeka na poprzednią.
Polecam Ci dopisać wyświetlenie console.log (n) po każdym timeoucie i wtedy zobaczysz jak to się wykonuje.
-
W końcu po dłuższym kombinowaniu wpadłem na pomysł jak to zrobić.
Jesli setTimeout() nie działa to trzeba go wyeliminować.
Poniżej wersja kodu tylko z jednym setTimeout - tym działającym.
function zmienslajd()
{
if (n==0) {losowe(zakres);} //losuje 5 liczb i umieszcza w tablicy
num = tablica[n]; slajd(n, num); //wyswietla kolejne zdjecie
n++;
if (n>4) {n=0; t=1;}
if (t==1)
{setTimeout(zmienslajd,2000);} //kolejne piatki powoli
else{setTimeout(zmienslajd,10);} //pierwsza piatka szybko
}
Dziekuje za podpowiedzi.
PS.Rozwiązałem mój problem, jednak dalej nie wiem czemu setTimeout w jednym miejscu działa a w drugim nie.
Nie wiem jak zrobić opóznienia czasowe i wymusić kolejność wykonywania instrukcji.
Ale póki co to za cieńki jestem JS i są małe szanse żeby to zmienić.
-
Tak jak pisał smok wawelski funkcje setTimeout uruchomią się jednocześnie co daje wrażenie że wykonuje się tylko ten "ostatni". Dzieje się tak dlatego że wywoływanie funkcji w JavaScript poprzez setTimeout jest realizowane jakby w oddzielnych wątkach (takie uproszczenie) a sam skrypt nie jest wykonywany tak jak w BASIC na przykład (linia po linii) tylko przeglądarka wczytuje najpierw cały skrypt i potem go uruchamia. Jak ktoś jest przyzwyczajony do pisania programów np. w C++ itp. to pisanie kodu w JavaScripcie może doprowadzić czasami do szewskiej pasji ;) . W kodach stron JavaScriptu używam jak najrzadziej (najczęściej jak potrzebuję zrobić jakąś "sztuczkę" i oczywiście jak potrzebuję AJAXa) i w zasadzie wszystko co się da piszę w PHP (nie wiem czy twój host umożliwia to).
Linki jakie zawsze mam pod ręką jak piszę kod strony:
http://www.staff.amu.edu.pl/~psi/informatyka/javascript/archiwum.html
https://www.w3schools.com/js/default.asp
Pozdrawiam i powodzenia w pisaniu :)
-
No tak, zapewne masz rację.
Strona jest w PHP ale automatyczna zmiana obrazkow na stronie to juz raczej JS.
-
Podmiana/wyświetlanie obrazków w PHP to będzie coś w stylu standardowego:
echo '<img src="'.$filename.'"/>';
JS można co najwyżej wykorzystać do wygodnej zamiany obrazka poprzez mechanizm getElementbyId.
Nie wiem czy dobrze Ciebie zrozumiałem z tym co chcesz osiągnąć...
-
Zmiana obrazka w php bedzie wymagac przeladowania strony,
A js nie, obrazek zmienia sie sam.