Mogućnost grafike i animacije



 
MAPIRANE SLIKE

    Podsetnik na HTML dizajn mapirane slike na strani klijenta

 

Ako se želi kreirati mapa na strani klijenta:
(Ovo je primer jedne mape koja poseduje "menije" za izbor zona)

<HTML>
<HEAD>          <title>Java Script skola; Mapiranje slika</title>
  <script LANGUAGE="JavaScript">
         function update(t) {
          document.form1.text1.value = t;
         }
</script>
</head>

<body>
<map NAME="map1">
<area SHAPE=RECT COORDS="14,15,151,87" onClick="update('prva zona');"
onMouseOver="window.status='Zona 1'; return true;">
<area SHAPE=RECT COORDS="162,16,283,85" onClick="update('2. zona');"
onMouseOver="window.status='Zona 2'; return true;">
<area SHAPE=RECT COORDS="294,15,388,87" onClick="update('tre&#263;a zona');"
onMouseOver="window.status='Zona 3'; return true;">
<area SHAPE=RECT COORDS="13,98,79,178" onClick="update('zona br. 4');"
onMouseOver="window.status='Zona 4'; return true;">
<area SHAPE=RECT COORDS="92,97,223,177" onClick="update('zona br. 5');"
onMouseOver="window.status='Zona 5'; return true;">
<area SHAPE=RECT COORDS="235,98,388,177" onClick="update('&#353;esta zona');"
onMouseOver="window.status='Zona 6'; return true;">
<area SHAPE=default onClick="update('Bez izabrane zone');"
onMouseOver="window.status='Izaberite zonu'; return true;">
</map>
<h1 align="center">Mapa slike na strani klijenta</h1>
<hr>
Naredna mapa slike koristi JavaScript funkcije u svojim zonama. Kretanjem kroz zone
prikazuju se informacije u statusnoj liniji. Odabiranje zone klikom navodi se naziv zone u tekstualnom polju ispod mape.
<hr>
<p align="center" Alt="mapirana slika" border="2">
<img SRC="imagemap.gif" USEMAP="#map1">
<hr>
<FORM NAME="form1">
<b>Odabrana zona:</b>
<input TYPE="text" NAME="text1" VALUE="Izaberite zonu">
</form>
<hr>

</body>
</HTML>

Datoteka pr61.htm

Postoje dva tipa mapiranih slika:
   na strani klijenta (radi rasterećenja servera, linkovana oblast slike je definisana unutar HTML dokumenta)
   na strani servera (HTTP serveru se prenose koordinate zona na koju se kliknulo, na osnovu kojih on vraća dokument čije dovlačenje je zahtevano; ovaj način implementacije opterćuje server, korisnik ne vidi tačan URL zahtevanog dokumenta, a kod starog načina mapiranja mapa slike i povezani URL-ovi su se nalazili na serveru, te je format mape slike zavisio od HTTP servera)
 

Java Script mehaniyam mapiranja na strni klijenta:

1. kreiranje mape (GIMP, PhotoShop, Paint,...)
2. definisanje mape upotrebom taga MAP (videti primer iz prethodne škole; definisati koordinate i   oblik zona...)
3. uključiti mapiranu sliku u dokument upotrebom taga IMG i atributa USEMAP (videti primer iz prethodne škole)
4. PRIMER 61 koristi
         onMouseOver
         onClick
Jedan od tipičnih načina za obradu događaja pomeranja pokazivača miša preko linka jeste prikaz poruke u statusnoj liniji. Na primer:

          < a href="nekilink.htm"    onMouseOver="window.status='Zona 1'; return true;" >
                    Link
              </A>

           return true; iskaz je neophodan da spreci da se statusna linija (sa URL-om) prepise nakon prikaza URL-a, tj. ne postoji nacin da poruku window.status brisete dok ne bude prikazana (npr. sa window.sttus=" ");

           Jedan od tipičnih načina za obradu događaja pritisnutog taster miša preko linka jeste poziv potprogram koji izdaje neku poruku. Na primer:
          < a href="nekilink.htm"   onClick="update('prva zona');" >
                    Link
              </A>
Dakle, onClick procedura za obradu dogadja se pokrece pre strane sa linkom koja je ucitana unutar pretrazivaca. Ova je, uglavnom, korisno ako se prave uslovne hiperveze ili ako se zeli prikazati odbijanje pre pokretanje strane sa linkom.
U PRIMERU 61 se upotrebom onClick zeli izbeci osobina novijih browser-a, a to je neprikazivanje opisa u statusnoj liniji mapirane slike, ako je ukljucen atribut HREF.

       Korisnička funkcija update šalje argument (vrednost niske t u definiciji zona mapa) u polje za tekst koje je imenovano sa form1. text1, a nativ polja form 1 se kasnije navodi i u telu dokumenta, tj.
<FORM NAME="form1">, odnosno imenuje naziv NAME=...
<input TYPE="text" NAME="text1" VALUE="Izaberite zonu">
 
Dinamika slike: RollOver  / prelaz preko slike

Želite li da se prikaz slike na Web strani menja zavisno od prelaza mišem, onda:

Dinamične slike su podržane kao deo JavaScript 1.1 počev od NN 3.0, IE 4.0

<HTML>
<HEAD></HEAD>
<BODY>
Primer izbora boje podloge (BODY BGCOLOR) zavisno od doba dana....<br>
<h1 align="center">Rollover efekat</h1>
<hr>
Naredne slike ce se promeniti prelaskom mi&#353;a preko nje.
<br>Ina&#269;e, obe slike su hiperveze, tj. veze ka drugim objektima (kliknite !).

<p>
<a href="skolajs0.htm"
onMouseOver="document.images[0].src='zad31.gif';"
onMouseOut="document.images[0].src='zad32.gif';">
<img src="zad31.gif"  alt="" border="0">
</a>
<P> &nbsp;</p>

<p align="center">
<a href="skolajs0.html"
onMouseOver="document.images[1].src='dstrela.gif';"
onMouseOut="document.images[1].src='lstrela.gif';">
<img src="lstrela.gif" alt="" border="0">
</a>
</BODY>
</HTML>

Datoteka pr62.htm

Korisna osobina JavaScript-a je dinamična promena slika (na primer: jednostavne animacije izmena slika prelaskom miša, prekrivanje i otkrivanje časovnika i kalendara,...)

Prikaz slika na Web strani se odvija u nizu. Izmenom članova niza, jedna slika se može zameniti drugom, tj. sadržaj se može dinamički menjati i bez upotrebe layer-a. ALI, ovim mehanizmom se mogu samo izmeniti postojeće slike, ali se ne mogu dodavati nove slike. Takođe, ma koja slika se učitava sa servera, što može biti neefikasno za veće slike ili animacije.

NIZ images

Svaki image objekat je dete document objekta.
Svaki image objekat poseduje osobine: (primer slika iz prethodne skole)
  border
  complete (true/false)
  height, width
  hspace, vspace
  name
  src
Najvaznija ( i najcesca) osobina jeste osobina src.

Objekat image ne poseduje metode.

Postoje tri procedure za obradu koje su u upotrebi:
  dogadjaj onLoad se dešava nakon učitavanja slike
  dogadjaj onAbort se dešava ako posetilac prekine učitavanje strane pre učitavanja slike
  dogadjaj onError se dešava ako nije pronađena datoteka sa slikom ili je nekorektna
 

Unos slike unapred

    Kako se obezbediti u radu sa slikama čak i ako se radi sa brzinom modema? Kreirati image objekat (naredba new), oderditi sliku koja će se učitati i smestiti je u keš memoriju.
     Slika=new Image();
     Slika.src="fotografija1.gif"
 
 
 

PRIMER 62 koristi
         onMouseOver
         onMouseOut
Jedan od tipičnih načina za obradu događaja pomeranja pokazivača miša preko i van slike koja je hiperveza jeste da svaki link sadrzi dogažaje onMouseOver i onMouseOut koji menjaju sliku:
          <a href="skolajs0.html"
onMouseOver="document.images[1].src='dstrela.gif';"
onMouseOut="document.images[1].src='lstrela.gif';">
LINK
        </A>

 

PRIMER ANIMACIJE
 

<html>
<head>
<title> JavaScript: osnove animacije</title>
<script LANGUAGE="JavaScript">
/* globalne promenljive */
var tekSlika=0;
var pozDesnogDela=1;
var redniBrojSlike=0;
var redniBrojVireceSlike=0;
/* funkcija koja ucitava  delove animacije 1 slajd unapred */
function prikaz() {
   a1 = new Image();
   a1.src = "bubica1.gif";
   a2 = new Image();
   a2.src = "bubica2.gif";
   a3 = new Image();
   a3.src = "bubica3.gif";
   a4 = new Image();
   a4.src = "bubica4.gif";
   a5 = new Image();
   a5.src = "bubica5.gif";
   a6 = new Image();
   a6.src = "bubica6.gif";
   a7 = new Image();
   a7.src = "bubica7.gif";
   a8 = new Image();
   a8.src = "bubica8.gif";
   window.setTimeout("next();",800);
}

/* funkcija koja pomera animaciju na sledeci slajd */
function next() {
   redniBrojSlike += 1;
   if (redniBrojSlike > 8) {
       redniBrojSlike = 4;
       document.images[tekSlika].src = "bubica0.gif";
       tekSlika = (tekSlika + 1) % 5;
       pozDesnogDela = (tekSlika + 1) % 5;
   }
  redniBrojVireceSlike = redniBrojSlike - 5;
   if (redniBrojVireceSlike <= 0) redniBrojVireceSlike = 0;
   document.images[tekSlika].src = "bubica" + redniBrojSlike + ".gif";
   document.images[pozDesnogDela].src = "bubica" + redniBrojVireceSlike + ".gif";
   window.setTimeout("next();",50);
}
</script>
</head>
<body onLoad="prikaz();">
<H1 align="center"> Primer animacije u skriptu</H1>
<HR>
<center>
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
</center>
<HR>
</body>
</html>


            Datoteka pr63.htm
 

Java Script i animacije:
 
    uključiti animirani GIF koji se neprekidno ponavlja
    kreirati skript koji pokreće animaciju u vidljivom području navigatora

    1. krirati sedam slika bubice, predvideti i nultu sliku koja ne prikayuje bubicu (tj. situacija kada bubica nije u navigatoru)
    2. kreirati HTML dokument koji uljucuje pet puta prikaz nulte slike (broj pet, jer ce niz images imati slajdove tj. članove
        od 0..4 koji ce se izmenjivati)
   3. kako nulta slika je prazna, to se na pocetku ne vidi nista

<H1 align="center"> Primer animacije u skriptu</H1>
<HR>
<center>
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
<img src="bubica0.gif" width=120 height=120 alt="" border="0">
</center>
<HR>
 

Globalne promenljive:
var tekSlika=0;              /* sadrzi vrednosti 0..4, oynacava redni vroj slike bubice koja je trenutno pokrenuta */
var pozDesnogDela=1;   /* cuva poziciju desnog dela pokrenute slike, jer deo pterhodne slike moye da viri u sledecoj */
var redniBrojSlike=0;    /* cuva vrednos 1..8, to su delovi bubice koje se prikayuju u tekucem slajdu */
var redniBrojVireceSlike=0;  /* 1..8. cuva ako je potrebno redni broj slike bubice koji viti u sledecem slajdu */
 

Pomeranje slike bubice na sledeci slajd
Metod setTimeOut neprekidno poziva f-ju next u f-ji prikaz (800)
 
 

 if (redniBrojSlike > 8) {
       redniBrojSlike = 4;
       document.images[tekSlika].src = "bubica0.gif";
       tekSlika = (tekSlika + 1) % 5;
       pozDesnogDela = (tekSlika + 1) % 5;
   }
 

ako tekuca slika ima redni broj >8, onda se ciklicki pomeraju vrednosti za tekSlika i pozDesnogDela (tako da polzaj ne moze postati veci od rednog broja 4),
dok
redniBroj Slike=4 (jer je tekuce polje pre narednog polja za prikaz vec preslo slike 1,2,3)
 
 

  redniBrojVireceSlike = redniBrojSlike - 5;
   if (redniBrojVireceSlike <= 0) redniBrojVireceSlike = 0;
 

izracunava se slika prikaza u narednom polju, tj. slike 6, 7, 8 se poklapaju sa slikama 1, 2, 3 tokom formiranja bubice, pa je zato
  redniBrojVireceSlike = redniBrojSlike - 5;
Ako se pri tom zadesila negativna vrednost u redniBrojVireceSlike, onda se ona postavi na nula.