Autor Wątek: JS specjalista potrzebny  (Przeczytany 233 razy)

tdu

  • *****
  • Wiadomości: 751
  • Miejsce pobytu:
    Gdansk
  • Pomógł: 13
    • Nasze Wędrowanie
JS specjalista potrzebny
« dnia: 2018.01.12, 18:46:22 »
Jestem w tym temacie poczatkujący, prosze o pomoc w opanowaniu skryptu

Cytuj

   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ć ?
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic
CPC6128/N100

smok.wawelski

  • **
  • Wiadomości: 98
  • Miejsce pobytu:
    Warszawa
  • Pomógł: 1
Odp: JS specjalista potrzebny
« Odpowiedź #1 dnia: 2018.01.12, 20:27:28 »
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.

tdu

  • *****
  • Wiadomości: 751
  • Miejsce pobytu:
    Gdansk
  • Pomógł: 13
    • Nasze Wędrowanie
Odp: JS specjalista potrzebny
« Odpowiedź #2 dnia: 2018.01.13, 14:44:56 »
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.
Cytuj
   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ć.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic
CPC6128/N100

LordFarfocel

  • ***
  • Wiadomości: 110
  • Pomógł: 0
Odp: JS specjalista potrzebny
« Odpowiedź #3 dnia: 2018.01.13, 15:28:39 »
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  :)

tdu

  • *****
  • Wiadomości: 751
  • Miejsce pobytu:
    Gdansk
  • Pomógł: 13
    • Nasze Wędrowanie
Odp: JS specjalista potrzebny
« Odpowiedź #4 dnia: 2018.01.13, 16:30:45 »
No tak, zapewne masz rację.
Strona jest w PHP ale automatyczna zmiana obrazkow na stronie to juz raczej JS.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic
CPC6128/N100

LordFarfocel

  • ***
  • Wiadomości: 110
  • Pomógł: 0
Odp: JS specjalista potrzebny
« Odpowiedź #5 dnia: 2018.01.14, 01:23:54 »
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ąć...

tdu

  • *****
  • Wiadomości: 751
  • Miejsce pobytu:
    Gdansk
  • Pomógł: 13
    • Nasze Wędrowanie
Odp: JS specjalista potrzebny
« Odpowiedź #6 dnia: 2018.01.14, 09:29:38 »
Zmiana obrazka w php bedzie wymagac przeladowania strony,
A js nie, obrazek zmienia sie sam.
ZX81/ZX 48k/Zx48k+/ZX +2/ZX +2A/+3/TC2048/FDD3000/FDD5000/3"/3,5'/5,25'/Beta 48k Apina/D+/GP50s/DIVIDE CF/Masterface/Polbasic
CPC6128/N100