Leírások+Referenciák / JavaScript / IX. Layerek használata

A layerekrõl általában

A Netscape Navigator 4.0 egy rendkívül fontos, jól hasznosítható új tulajdonsága volt a layerek használatának bevezetése. Aki már dolgozott valamilyen jobb képfeldolgozó, képretusáló programmal, például az Adobe Photoshoppal, annak nem jelenthet nagy újdonságot a layerek fogalma. A layereket (rétegek) legegyszerûbben fóliáknak képzelhetjük el. Minden egyes ilyen fóliarétegnek más és más lehet a tartalma, egymástól függetlenül kezelhetjük õket. Tehetünk rá képet, szöveget, ûrlapelemeket stb., majd a layereket elhelyezhetjük az oldalunkon. Az egyes rétegek egymásra is kerülhetnek, természetesen a felsõ rétegek takarják az alattuk levõ rétegeket, de ahol az egyes rétegek átlátszóak, ott átengedik az alattuk levõ rétegek tartalmát. Ezzel például könnyedén megvalósíthatunk pusztán HTML elemek használatával olyan képet, amelyre egy szöveget írunk, vagy az oldalon lévõ szöveg is kerülhet takarásba valamely más objektum, például egy kép által. A tapasztalatok azt mutatják, hogy MS Internet Explorer alatt a layeres példák nagy része nem mûködik helyesen. Sajnos ezzel számolni kell...

Layerek létrehozása

Layereket a <LAYER> illetve az <ILAYER> HTML elemekkel készíthetünk. Az alábbi táblázat bemutatja a beállítható tulajdonságokat:

Tulajdonság Leírás
name = "layer_neve"A réteg neve
left = xA bal felsõ sarok x koordinátája
top = yA bal felsõ sarok y koordinátája
z-index = layer_indexA layer sorszáma
width = szélesség_pixelekben  A layer szélessége képpontokban
clip = "x1,y1,x2,y2"A réteg látható területét definiálja (négyzet)
above = "layer_neve"A megadott nevû réteg felett jelenik meg a layerünk
below = "layer_neve"A megadott nevû réteg alatt jelenik meg a layerünk
visibility = show | hide | inherit A réteg láthatósága
bgcolor = "rgb_szín"A réteg háttérszíne
background = "kép_URL" Háttérkép

A <LAYER> HTML elemmel az oldal tetszõleges pozíciójába elhelyezhetünk layereket. A pozíciót a left és a top attribútumok adják meg. Ezek a layer bal felsõ pontjának helyét határozzák meg. Amennyiben nem adunk meg ilyen értékeket, akkor az alapértelmezett pozíció az ablak bal felsõ sarka. Az <ILAYER> elem a layer pozícióját nem határozza meg explicit módon, hanem a dokumentum aktuális pozíciójába helyezi el.

Most tekintsünk meg egy rövid példát.

<HTML>

<LAYER NAME="negyzet" Z-INDEX=0 LEFT=60 TOP=25>
<IMG SRC="pld091.gif">
</LAYER>

<LAYER NAME="haromsz" Z-INDEX=1 LEFT=30 TOP=50>
<IMG SRC="pld092.gif">
</LAYER>

<LAYER NAME="szoveg" Z-INDEX=2 LEFT=50 TOP=70>
<FONT SIZE=+3>Layer példa</FONT>
</LAYER>

</HTML>

Amint látható, három különbözõ layert definiáltunk. Minden, ami a <LAYER> </LAYER> illetve az <ILAYER> </ILAYER> HTML elemek között van az az adott layerhez tartozik. A példában a név (name) és a pozícionáló (left, top) attribútumok mellett megadtuk a z-index tulajdonságot is, ami a layerek megjelenítésének sorrendjét határozza meg. A legkisebb z-indexû layer jelenik meg legelõször, ez kerül legalulra. A legnagyobb indexû jelenik meg legfelül. Példánkban ez a szöveget tartalmazó layer. A z-index tetszõleges pozitív egész lehet, így ugyanezt az eredményt értük volna el, ha az elsõ layernek 5, a másodiknak 17, a harmadiknak 33 z-index értéket adunk.

A JavaScript és a layerek kapcsolata

A layereket JavaScript-en keresztül is kezelhetjük. Ezt két módon tehetjük meg legegyszerûbben. Adjunk nevet a layernek:

<LAYER NAME="layer_neve">
...
</LAYER>

Ekkor a layert elérhetjük a document.layers["layer_neve"] ill. a document.layer_neve hivatkozásokkal. Elérhetjük a layereket a korábbiakban már megismert indexes módszerrel is, bár ennek használata nem túl kényelmes. A legalsó layert a document.layers[0] hivatkozással érhetjük el. A következõt a document.layers[1] néven és így tovább. Vegyük észre, hogy ezen indexelés nem egyezik meg a z-indexeléssel!

A layerek attribútumainak nagy része elérhetõ és módosítható JavaScript segítségével. Ezt használjuk ki a következõ kis példában

Ez a szöveg a layer része... 

A forráskód pedig a következõ:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- A JavaScript elrejtése

function Show(){
  if (document.layers["myLayer"].visibility=="show")
    document.layers["myLayer"].visibility="hide";
  else
    document.layers["myLayer"].visibility="show";
}
//-->

</SCRIPT>
</HEAD>


<BODY>

<ILAYER NAME="myLayer" visibility="show">
<FONT SIZE=+2 COLOR=#FF0000> Ez a szöveg a layer része... </FONT>
</ILAYER>

<FORM>
<INPUT TYPE="button" VALUE="Réteg elrejtése/mutatása" onClick="Show()">
</FORM>

</BODY>
</HTML>

A gombra kattintva a Show() függvényt hívjuk meg, amely a visibility attribútumot állítja át "hide"-ra (elrejt), ha az eredetileg "visible" (látható) volt, és fordítva. Ezt egy feltételes elágazással teszi. Azzal, hogy az attribútumot átállítjuk, elrejthetjük illetve megjeleníthetjük az adott layert. Az új értéket ("hide" vagy "show") mint sztringet kell megadnunk (például document.layers["myLayer"].visibility="hide" és nem document.layers["myLayer"].visibility=hide !!)

Mozgó rétegek

A layerek left és top attribútumaihoz is rendelhetünk új értékeket JavaScript segítségével. Hatására layerünk új helyen jelenik meg. Például a következõ sor 150-re állítja a layer vízszintes pozícióját:

document.layers["layer_neve"].left = 150;
Ha egy olyan programot írunk, amely folyamatosan változtatja ezeket az értékeket, akkor egyszerû animációt készíthetünk. Erre mutat példát a következõ program.

<HTML>
<HEAD>

<SCRIPT LANGUAGE = "JavaScript">
<!-- A JavaScript kód elrejtése

layerArr = new Array();
index = 0;

function setArr(name,dir){
  layerArr[index] = new Array(2);
  layerArr[index][0] = name;
  layerArr[index][1] = dir;
  index++;
}
function init(){
  setArr("layer1",true);
  setArr("layer2",false);
  setArr("layer3",true);
}
function move(){
  for (var i=0; i<3; i++){
    set_layer_pos(i);
  }
}

function change_dir(i){
  layerArr[i][1] = !(layerArr[i][1]);
}
function set_layer_pos(i){
  var layer = document.layers[layerArr[i][0]];
  var pos = layer.left;
  if (pos > 300) change_dir(i); //elértük a jobb végét, hatra megyünk
  if (pos < 0)   change_dir(i); //elértük a bal  végét, újra elõre

  if (layerArr[i][1]) pos += 5; //ha elõre megyünk, növeljük a pos-t
  else pos -= 5;                //egyébként csökkentjük

  layer.left = pos;             //beállítjuk az új pozíciót
}

// -->
</SCRIPT>

<BODY onLoad="init(); setInterval('move()',20)">

<LAYER NAME="layer1" Z-INDEX=0 LEFT=0>
<IMG SRC="pld091.gif">
</LAYER>

<LAYER NAME="layer2" Z-INDEX=1 LEFT=150>
<IMG SRC="pld092.gif">
</LAYER>

<LAYER NAME="layer3" Z-INDEX=2 LEFT=300>
<FONT SIZE=+3>Layer példa</FONT>
</LAYER>

</BODY>
</HTML>

A példában három layert hoztunk létre (layer1, layer2, layer3 néven). Már az oldal betöltésekor meghívjuk az init() függvényt, amely létrehoz egy olyan tömböt, amelynek minden eleme kételemû tömb (setArr() függvény segítségével). Ebben tároljuk el a layerek nevét és mozgási irányát. Ha az iránynak true értéket adunk, akkor az azt jelenti, hogy a layer balról jobbra mozog a képernyõn. False esetben éppen az ellenkezõ irányban halad.

Az init() függvény után a move() függvényt hívjuk meg a setInterval() segítségével. Ez az 1.2-es JavaScriptben jelent meg. A megadott idõintervallumonként meghívja az elsõ paraméterében szereplõ függvényt. Hasonló a setTimeout() függvényhez, azzal a különbséggel, hogy csak egyszer kell meghívni.

A mozgatást a move() végzi úgy, hogy minden layerre meghívja a set_layer_pos() függvényt. Ez megvizsgálja, hogy az adott layer elérte-e a mozgatási terület határát, ha igen akkor megváltoztatja a mozgatás irányát (change_dir()). A mozgatási iránytól függõen növeljük ill. csökkentjük a vízszintes pozíció értékét (pos), amit visszaírunk az adott layer left attribútumába.

<< Vissza a tartalomhoz

Tovább a tizedik fejezethez >>