Grafiken vorladen 02 (mit JavaScript)
Durch JavaScript-Anweisungen werden die Grafiken dem Browser als Elemente der Seite bekannt gemacht. Dabei werden die Grafiken bereits in den internen Speicher des Browsers geladen aber noch nicht angezeigt. |
|
Einer von x Sets von Grafiken vorladen mit JavaScript
UPDATE 26.05.2011 völlig neues Script und Erklärungen überarbeitet
1) Die vorzuladenden Grafiken werden in mehreren Arrays gruppiert.
2) Lediglich die Grafiken eines Arrays sollen vorgeladen werden.
3) Der betreffende Array wird frei gewählt.
4) Die vorgeladenen Grafiken werden in einem neuen Array abgelegt.
Für eine MouseOver-Funktionen sollte das MouseOver-Bild schon bereitgestellt werden (Laden der Grafik in den Browserspeicher), bevor der Mauszeiger den Effekt einleitet. So kann man eine verzögerte Anzeige umgehen. Schließlich würde sonst erst beim Auslösen der MouseOver-Funktion die Anfrage für das zu tauschende Bild zum Server geschickt.
Das Gleiche gilt zum Beispiel auch für eine DiaShow deren Bilder später ohne Verzögerung angezeigt werden sollen.
|
|
Das Ziel
Nach dem Vorladen sind die Grafiken eines Sets dem Browser bekannt und bereits in den Browsercach geladen. Die Informationen für die Grafiken werden vom Vorlade-Script in einem neuen Array (Bilder) abgelegt. Mit JavaScript kann man dann für unterschiedliche Anwendungen auf diese Informationen im Array 'Bilder' zugreifen.
Nun greife ich ein wenig vor: Ich habe die in diesem Beispiel vorgestellte neue Funktion BilderVorladen() bereits ausführen lassen. Nun können Sie zum Testen auf die Infos im Array 'Bilder' zugreifen:
Querverweis: Was ist ein Array? Basiswissen Array Seite 1
Einsatzbereiche für dieses Script:
1) Sie möchten bei einer größeren Bildauswahl für eine Diashow (zum Beispiel) nicht sämtliche Grafiken sofort laden. Dazu könnten Sie die anzuzeigenden Bilder in Gruppen zusammenfassen und bei der Auswahl einer Gruppe genau diese Grafiken vorladen.
2) Sie möchten für eine MouseOver-Aktion (zum Beispiel) mehrere Sets von Grafiken bereitstellen. Abhängig vom gewählten Layout der Seite haben die Sets unterschiedliche Farben. Da nur ein Set benötigt wird, sollen nicht sämtliche Grafiken sofort geladen werden. Nur der benötigte Set von Grafiken soll vorgeladen werden.
Dazu werden die Gruppen von Fotos / die Sets von Grafiken in Registern (Arrays) abgelegt. Die Infos zu den später vorzuladenen Grafiken stehen nun einzelnen, separaten Arrays!
Hier in diesem Beispiel werden zwei Sets von Grafiken zusammen gefasst. Der erste Set wird im Array 'Tagfotos' der zweite im Array 'Nachtfotos' gruppiert.
var Tagfotos = new Array;
Tagfotos[Tagfotos.length] = "images/tag01.jpg";
Tagfotos[Tagfotos.length] = "images/tag02.jpg";
Tagfotos[Tagfotos.length] = "images/tag03.jpg";
var Nachtfotos = new Array;
Nachtfotos[Nachtfotos.length] = "images/nacht01.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht02.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht03.jpg";
Vorladen mit JavaScript 02 - Erklärungen
Das Script basiert auf meinem Beispiel 'Vorladen mit JavaScript 01'. Bei Version 02 wird dem Vorlade-Sript der Name eines Arrays übergeben. Vorher hatte ich Grafiken für mehrere Grafik-Sets in Arrays zusammengefasst. Nur die Grafiken des von mir bestimmten Sets (und nicht alle) werden vom Script dann vorgeladen.
Diese Script-Variante wird dann eingesetzt, wenn die Ladezeit minimiert werden soll oder ich die Auswahl einer Gruppe von Grafiken später ändere / neu festlege. Die Notierung der Grafiken für die Sets habe ich übersichtlich und wenig fehlerträchtig angelegt.
a Das Script im Head-Bereich
<script type="text/javascript" language="JavaScript">
<!--
var Bilder = new Array();
var Tagfotos = new Array;
Tagfotos[Tagfotos.length] = "images/tag01.jpg";
Tagfotos[Tagfotos.length] = "images/tag02.jpg";
Tagfotos[Tagfotos.length] = "images/tag03.jpg";
var Nachtfotos = new Array;
Nachtfotos[Nachtfotos.length] = "images/nacht01.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht02.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht03.jpg";
// hier könnten Sie weitere Sets eintragen
var Autos = new Array;
Autos[Autos.length] = "grafiken/volkswagen.jpg";
Autos[Autos.length] = "grafiken/toyota.jpg";
Autos[Autos.length] = "images/audi.jpg";
function BilderVorladen(ArrayName)
{
// vorzuladene Bilder werden in den Array 'Bilder' geschrieben
for (i=0; i < ArrayName.length; i++) {
Bilder[i] = new Image();
Bilder[i].src = ArrayName[i];
}
}
// Bild-Set "Tagfots" vorladen
BilderVorladen(Tagfotos);
/*
hier folgen nun Funktionen für einen Bildtausch
die auf die vorgeladenen Grafiken zugreifen
Verweise für Quellcode und Download im Kopf dieser Seite
*/
//-->
</script>
Abhängig von der Anzahl der Grafiken wird die for-Schleife entsprechend oft durchlaufen. Das wird mit "ArrayName.length" kontrolliert. Mit "ArrayName.length" wird die Anzahl der Array-Elemente ermittelt.
Die Infos zu den vorgeladenen Grafiken stehen nach dem Durchlauf im Array 'Bilder' !
Ein neues Register "Bilder" wird generiert [Bilder = new Array()]
Im Register "Tagfotos" sind Grafiken notiert, schaue dort nach
Element 1 des Registers = die Grafikreferenz (URI) für die Grafik 1 "images/tag01.jpg"
Element 2 des Registers = die Grafikreferenz (URI) für die Grafik 2 "images/tag02.jpg"
Element 3 des Registers = die Grafikreferenz (URI) für die Grafik 3 "images/tag03.jpg"
führe die nächsten Schritte für jede Grafik im Register "Tagfotos" aus:
{
gehe zum ersten / nächsten Element des Registers "Tagfotos"
Bilder(i) ist ein neues Image-Objekt
die Grafikreferenz (URI) für dieses Objekt ist das, was in Tagfotos(i) steht
hänge diese Information an den Array 'Bilder' an
}
b Aufruf der Funktion
Der Array-Name für die vorzuladenden Grafiken wird der Funktion als Parameter übergeben. Dieser Parameter wird innerhalb der runden Klammern ohne Anführungszeichen notiert.
BilderVorladen(Tagfotos);
Das wäre die simpelste Variante zum Aufruf der Funktion. Mit einer Notierung im Headbereich gleich beim Laden der Seite einleiten.
Mit weiteren Javascript-Anweisungen könnte man den Aufruf flexibler gestalten und den Array-Namen, der als Parameter (innerhalb der Klammern) übergeben wird, jedesmal neu bestimmen oder von anderen Faktoren abhängig neu festlegen.
Zum Beispiel: Lade tagsüber den Bilder-Set für den Tag, sonst den für die Nacht.
wenn Uhrzeit > 7 oder wenn Uhrzeit < 20
BilderVorladen(Tagfotos);
sonst
BilderVorladen(Nachtfotos);
|
if (Std > 7) || if (Std < 20) {
BilderVorladen(Tagfotos); }
else {
BilderVorladen(Nachtfotos); }
|
weitere Möglichkeiten siehe unten: Verfahren des Aufrufs
Das war's schon! Lassen Sie sich von den langen Erklärungen hier nicht abschrecken und kopieren für einen ersten Versuch einfach den Code in ihre Seite. Tragen Sie die URL der Bildquellen ein. Falls Sie dann die Funktion der InfoBox erweitern möchten oder weitere Erklärungen benötigen, lesen sie den betreffenen Abschnitt.
Wenn Sie mehr über Funktion und Anpassungen erfahren möchten, lesen Sie unten weiter. Sie können diese Vorlage um einige Bilder-Sets erweitern oder Steuerfunktionen hinzufügen.
Einsatzbereiche
Das Script eignet sich in dieser Konstellation sehr gut dazu, ganz gezielt bestimmte Grafiken vorzuladen. Den Vogang des Vorladens könnten Sie abhängig von bestimmten Kriterien, zeitgesteuert oder benutzergesteuert einleiten.
Entsprechend wird der Aufruf der Funktion notiert! Soll ein Set von Grafiken gleich beim Laden der Seite vorgeladen werden, notieren sie den Aufruf im Head-Bereich. Möchten Sie einen bestimmten Set von Grafiken laden und den Namen des Arrays von Fall zu Fall festlegen, stehen Ihnen unterschiedliche Verfahren zur Festlegung des betreffenden Namens zur Verfügung (siehe unten: Verfahren des Aufrufs).
Für die Weiterverarbeitung der vorgeladenen Bilder ergibt sich bei der Verwendung dieses Scripts ein großer Vorteil:
Die vorgeladenen Bilder stehen immer in ein und demselben Array 'Bilder'.
Auf vorgeladene Grafiken zugreifen
Die Infos zu den vorgeladenen Grafiken stehen nun im Array 'Bilder' und können mit JavaScript-Anweisungen ausgelesen werden !
Das können Sie hier gleich einmal testen für die vorgeladenen Bilder der beiden Sets:
Tagfotos[Tagfotos.length] = "images/tag01.jpg";
Tagfotos[Tagfotos.length] = "images/tag02.jpg";
Tagfotos[Tagfotos.length] = "images/tag03.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht01.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht02.jpg";
Nachtfotos[Nachtfotos.length] = "images/nacht03.jpg";
Sie können einen von zwei Bildsammlungen auswählen bzw. zwischen den Sets umschalten. Dazu wird der Set mit den Tagesfotos oder der mit den Nachtfotos vorgeladen mit:
BilderVorladen(Tagfotos) | BilderVorladen(Nachtfotos)
Zugriff auf Inhalte des Arrays 'Bilder'
Das Foto oben rechts mit der ID 'Testfoto' wird ausgetauscht mit den Anweisungen:
document.getElementById("Testfoto").src = Bilder[0].src;
document.getElementById("Testfoto").src = Bilder[1].src;
document.getElementById("Testfoto").src = Bilder[2].src;
Abhängig davon, welcher Bilder-Set vorgeladen wurde, enthält der Array 'Bilder' unterschiedliche Informationen. Wurden zum Beispiel die Grafiken des Arrays 'Bauwerke' (unten) vorgeladen, enthält der vom Script 'gefüllte' Array 'Bilder' nun 3 Elemente.
var Bauwerke = new Array;
Bauwerke[Bauwerke.length] = "stadthalle.jpg";
Bauwerke[Bauwerke.length] = "rathaus.jpg";
Bauwerke[Bauwerke.length] = "kirche.jpg";
Abfragen des Array 'Bilder':
Die Abfrage mit Bilder.length liefert den Wert 3
Die Abfrage mit Bilder[0].src liefert den Wert "stadthalle.jpg"
Verfahren des Aufrufs
1a Sie verwenden ein Dropdown-Menü (Beispiele in der Rubrik PullDown)
1b Sie verwenden Radiobuttons (Beispiele in der Rubrik Formulare)
Dann müsste man nach der erfolgten Auswahl mit if-Abfragen das Vorladen des gewählten Bilder-Sets einleiten. Wie das funktioniert beschreibe ich in den erwähnten Rubriken.
if (Auswahl == "x")
{
BilderVorladen(Tagfotos);
}
if (Auswahl == "y")
{
BilderVorladen(Nachtfotos);
}
2 Vorladen einleiten mit Links
Bilder-Set auswählen:
Geilenkirchen bei Tag Geilenkirchen bei Nacht
<a href='javascript:BilderVorladen(Tagfotos)'>Geilenkirchen bei Tag</a>
<a href='javascript:BilderVorladen(Nachtfotos)'>Geilenkirchen bei Nacht</a>
Beim Klicken wird die Vorlade-Funktion aufgerufen und der Array-Name übergeben.
Für Bastler:
Man könnte unmittelbar nach dem Vorladen jedesmal sofort eine DiaShow starten. Beim Klicken wird dann nicht nur die Funktion zum Vorladen sondern auch die Funktion einer DiaShow gestartet.
<a href='javascript:Show01()'>Geilenkirchen bei Tag</a>
<a href='javascript:Show02'>Geilenkirchen bei Nachts</a>
function Show01()
{
BilderVorladen(Tagfotos);
StartDiashow();
}
function Show02()
{
BilderVorladen(Nachtfotos);
StartDiashow();
}
Für die Diashow ist die Verwaltung der Bilder unkompliziert, denn die Bild-Informationen der Serie werden durch das PreLoader-Script ja alle in den neuen Array 'Bilder' geschrieben. Die DiaShow kann sich jedesmal (egal welche Serie gewählt wurde) in ein und demselben Array 'bedienen'.
Die Adresse (URL) für Bild 1 referenziert man mit: Bilder[0].src
Die Adresse (URL) für Bild 2 referenziert man mit: Bilder[1].src
Die Adresse (URL) für Bild 3 referenziert man mit: Bilder[2].src
bedeutet (JavaScript beginnt beim Zählen mit Null):
Die Adresse für Bild 1 ist das, was im Array 'Bilder' als erstes Element eingetragen wurde = Bilder[0].src
Die Adresse für Bild 2 ist das, was im Array 'Bilder' als zweites Element eingetragen wurde = Bilder[1].src
Die Adresse für Bild 3 ist das, was im Array 'Bilder' als drittes Element eingetragen wurde = Bilder[2].src
... oder man durchläuft für die Fotoanzeige den gesamten Array 'Bilder' in einen Loop (mit einer Zeitverzögerung oder auf Klick). Beginne beim ersten Foto und dann schrittweise zum nächsten bis der letzte Eintrag im Array 'Bilder' erreicht ist.
(wahlweise: Dann von vorne beginnen)
for (i=0; i < Bilder.length; i++) {
// Aktion (klicken, zeitgesteuert)
// entspechendes Bild anzeigen
// Bildadresse = Bilder[i].src
// von vorne beginnen wenn letzer Eintrag im Array erreicht
if(i == Bilder.length) {
i == 0;
}
}
'Bilder.length' enthält die Information für die Länge des Arrays 'Bilder' (Anzahl der Elemente).
Preload Demo
Preload mit HTML und CSS
Preload mit JavaScript 01
Preloader-Info anzeigen
|