Aceasta lectie continua prezentarea modului de utilizare a obiectului image, cu exemple ajutatoare si un script complet.

1. Preincarcarea imaginilor

In lectia precedenta a fost explicat modul de incarcare a unei imagini noi in locul altei imagini folosind JavaScript.
In exemplul prezentat in Obiectul image (part. 1) la punctul "Incarcarea unei imagini noi", browserul trebuie sa astepte afisare noi imagini pana cand aceasta este incarcata iar in cazul unor imagini mari asteptarea poate dura prea mult. Acest lucru poate fi evitat prin "preincarcarea imaginilor", toate imaginile folosite in pagina vor fi incarcate la deschiderea acesteia (printr-un script JS) si vor fi afisate doar atunci cand este executata o comanda de afisare.
Iata un exemplu prin care puteti intelege cum se face aceast lucru:

<script type="text/javascript">
<!--
var hiddenImg = new Image();
hiddenImg.src = "img2.jpg";
//-->
</script>
<img name="imagine" src="img1.jpg" width="155" height="155">
<form>
<input type="button" onclick="document.imagine.src=hiddenImg.src" value="Schimba imaginea">
</form>
- In interiorul scriptului, prima linie creaza un nou obiect "Image".
A doua linie defineste adresa imaginii noi care va fi incarcata si reprezentata prin obiectul "hiddenImg". Astfel imaginea "img2.jpg" este incarcata (dar nu afisata) cand este executata aceasta linie de cod (la deschiderea paginii). Imaginea este pastrata in memorie pentru folosire ulterioara, si anume cand este apasat butonul "Schimba imaginea", care prin codul "document.imagine.src=hiddenImg.src" va afisa imaginea "img2.jpg" in locul celei actuale (img1.jpg). Afisarea se face imediat, fara a mai astepta incarcarea acesteia.
Daca numarul si marimea imaginilor este mare va dura mai mult incarcarea initiala a paginii, de aceea e bine sa aveti in vedere viteza conexiunii pentru a sti ce metoda este mai indicata.
In pagina web exemplul acesta va afisa urmatorul rezultat:
Exemplu preincarcare imagini cu JS

2. Efecte mouse-over (sau rollover)

Cu mouse-over ("MouseOver" si "MouseOut") se pot crea efecte (precum schimbarea unei poze) care apar la simpla trecere cu mouse-ul deasupra unei zone.
Iata un exemplu foarte simplu:

<a href="#"
    onMouseOver="document.Imgs.src='img1.jpg'"
    onMouseOut="document.Imgs.src='img2.jpg'">
<img src="img3.jpg" name="Imgs" width="155" height="155" border="0"></a>
- Dupa cum observati, "onMouseOver" si "onMouseOut" au fost adaugate in interiorul etichetei <a>, e gresit daca le adaugati in eticheta <img>. Imaginile nu pot reactiona la evenimentele "MouseOver" si "MouseOut", trebuie sa punem o eticheta de legatura (link) langa imagini.
Acest exemplu va afisa in browser urmatorul rezultat:
Exemplu mouse-over imagini cu JS
- Initial este afisata imaginea "img3.jpg", cand pozitionati mouse-ul deasupra imaginii va fi afisata "img1.jpg" iar dupa ce departati mouse-ul, va apare imaginea "img2.jpg".
Daca doriti ca efectul de schimbare a imaginii sa apara cand pozitionati mouse-ul pe un link si nu pe imagine, puteti modifica exemplul astfel (<img> va fi adaugat in afara etichetei "<a>...</a>"):
<a href="#"
    onMouseOver="document.Imgs.src='img1.jpg'"
    onMouseOut="document.Imgs.src='img2.jpg'">Legatura</a><br>
<img src="img3.jpg" name="Imgs" width="155" height="155" border="0">
- Acest exemplu este mai mult de studiu pentru a intelege procedeul de utilizare a efectelor "mouse-over". Nu este potrivit pentru adaugarea intr-o pagina web profesionala deoarece cauzeaza unele probleme:
Iata un script complet care evita problemele de mai sus, desi este mai lung, o data scris poate fi folosit cu usurinta si pt. alte pagini web si cu un numar mai mare de imagini.
<html>
<head>

<script type="text/javascript">
<!--
// Daca browserul suporta JavaScript
// Creaza matricea care va stoca imaginile, in variabila pics

  browserOK = true;
  var pics = new Array();
// -->
</script>

<script type="text/javascript">
<!--
  var objCount = 0;           // numarul imaginilor care se modifica in pagina web

// Functia pentru preancarcarea imaginilor, le introduce intr-o matrice
  function preload(name, first, second) {
  if (browserOK) {
    pics[objCount] = new Array(3);
    pics[objCount][0] = new Image();
    pics[objCount][0].src = first;
    pics[objCount][1] = new Image();
    pics[objCount][1].src = second;
    pics[objCount][2] = name;
    objCount++;
  }
}
function on(name) {
  if (browserOK) {
    for (i = 0; i < objCount; i++) {
      if (document.images[pics[i][2]] != null)
      if (name != pics[i][2]) {
        document.images[pics[i][2]].src = pics[i][0].src;
      } else {
      // afiseaza cea de-a doua imagine la pozitionarea cursorului deasupra acesteia
        document.images[pics[i][2]].src = pics[i][1].src;
      }
    }
  }
}
function off() {
  if (browserOK) {
    for (i = 0; i < objCount; i++) {
    // trimite in spate toate imaginile
      if (document.images[pics[i][2]] != null)
        document.images[pics[i][2]].src = pics[i][0].src;
    }
  }
}

// preancarca imaginile - trebuie sa specificati care imagini trebuie preancarcate
// si carui obiect Image apartin. Schimbati aceasta parte daca folositi imagini diferite sau daca adaugati mai multe
// (s-ar putea sa fie nevoie sa schimbati si in corpul documentului (body).
preload("link1", "img1.jpg", "img1t.jpg");
preload("link2", "img2.jpg", "img2t.jpg");
preload("link3", "img3.jpg", "img3t.jpg");
// -->
</script>
</head>
<body>
<a href="adresa1.htmll" onMouseOver="on('link1')" onMouseOut="off()">
  <img name="link1" src="link1.gif" width="100" height="100" border="0"></a> &nbsp;
<a href="adresa2.html" onMouseOver="on('link2')" onMouseOut="off()">
  <img name="link2" src="link2.gif" width="100" height="100" border="0"></a> &nbsp;
<a href="adresa2.html" onMouseOver="on('link3')" onMouseOut="off()">
  <img name="link3" src="link3.gif" width="100" height="100" border="0"></a>
</body>
</html>
Acest exemplu foloseste 3 imagini (respectiv 3 link-uri in BODY), dar puteti adauga si 100.
Scriptul pune toate imaginile intr-o matrice "pics" a carei elemente sunt construite de functia "preload()", care este apelata la inceput.
Apelul functiei "preload()" se face in felul urmator: "preload("link1", "img1.jpg", "img1t.jpg");", ceea ce inseamna ca scriptul trebuie sa incarce doua imagini "img1.jpg" si "img1t.jpg" pentru "link1". Prima imagine este imaginea care va fi afisata cand cursorul mouse-ului este în exteriorul imaginii. Iar atunci cand cursorul este pozitionat deasupra imaginii, va fi afisata cea de-a doua imagine. Cu primul argument "name" ("link1") al functiei "preload()" specificam carui obiect Image de pe pagina web apartin imaginile. In corpul ( <body> ) al exemplului veti gasi o imagine cu numele "link1".
Cele doua functii "on()" si "off()" sunt apelate prin evenimentele "onMouseOver" si "onMouseOut". Puteti observa ca functia "on()" trimite in spate toate celelalte imagini afisate initial (care sunt adaugate direct in eticheta <img>). Aceasta este necesar deoarece se poate intampla ca mai multe imagini sa fie afisate accentuat (de exemplu, evenimentul "MouseOut" nu are loc atunci cand utilizatorul muta cursorul de deasupra imaginii direct în afara ferestrei).
- Incercati sa testati si sa studiati acest script, astfel veti intelegeti modul lui de functionare.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag HTML5 este indicat sa contina meniul cu link-uri de navigare in site?
<section> <nav> <article>
<nav><ul>
 <li><a href="http://coursesweb.net/css/" title="CSS Course">CSS Course</a></li>
 <li><a href="http://www.marplo.net/jocuri/" title="Flash Games">Flash Games</a></li>
</ul></nav>
Ce proprietate CSS muta elementrul in dreapta sau stanga de la locul unde e?
text-align clear float
.some_class {
  width: 30%;
  float: left;
}
Clic pe metoda obiectului Math care rotunjeste numarul x descrescator la cel mai apropiat intreg.
Math.ceil(x) Math.abs(x) Math.floor(x)
var num = 12.34567;
num = Math.floor(num);
alert(num);       // 12
Indicati functia PHP care returneaza numarul de caractere dintr-un sir.
mb_strlen() count() stristr()
$str = "sir cu caractere utf-8 åèö";
$nrchr = mb_strlen($str);
echo $nrchr;        // 29
Clic pe raspunsul potrivit la intrebarea: "When it happened?".
On the 7th of July 1996 It is a quarter to 5. Nice weather.
When it happened? On the 8th of August 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Indicati raspunsul potrivit la intrebarea: "¿Cuando sucedió?".
Hace buen tiempo. En el 8 de Agosto de 2001 Son las tres menos cuarto.
¿Cuando sucedió? En el 8 de Agosto de 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Obiectul image 2

Last accessed pages

  1. Bubbles3 (8791)
  2. The Rise Of Atlantis (1521)
  3. Adjective - Exercitii si teste engleza incepatori (553)
  4. Adjectivul in limba engleza - The adjective (1039)
  5. Creare si editare pagini HTML (2259)

Popular pages this month

  1. Bubbles3 (3366)
  2. Gramatica limbii engleze - Prezentare Generala (3170)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2266)
  4. Butterfly Kyodai (2167)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1918)