Bildershow: Langsames ein- und Ausblenden von Bildern
Anzeige Hier werben
Ziel
Wir wollen eine Bildershow erstellen. In dieser Bildershow sollen Bilder aus- und eingeblendet werden.
Das Ein- wie das Ausblenden soll langsam geschehen, auch "fade" genannt.
Die Billder sollen alle 10 Sekunden ausgetauscht werden und wenn nötig wieder von vorne anfangen wenn das letzte Bild erreicht ist.
Benötigte Funktionen / Objekte / Eigenschaften
JavaScript
| Funktionsname |
Parameter |
Beschreibung |
| window.setInterval |
1. Aufruf der Funktion / der Anweisung 2. Alle x Millisekunden |
Durch diese Funktion wird die im 1. Parameter angebene Funktion / Anweisung alle die im 2. Parameter angebene Millisekunden ausgeführt |
| window.clearInterval |
1. Variable, die die Interval gespeichert hat |
Diese Funktion löscht die im Parameter gespeicherte Interval |
| window.setTimeout |
1. Aufruf der Funktion / der Anweisung 2. In x Millisekunden |
Diese Funktion gleicht sich fast Komplett im setInterval. Der Unterschied ist allerdings, dass die angegebene Funktion / Anweisung nur einmal ausgeführt wird. |
| new Image |
Ist ein Objekt |
new Image ist ein Objekt und wird als vorladen für Bilder benutzt Mehr hier nachzulesen: http://de.selfhtml.org/javascript/objekte/images.htm |
CSS
| Eigenschaft |
Wert |
Beschreibung |
| -moz-opacity |
0.4 |
Die Transparenz Angabe für den Firefox / Mozilla (Von 0 - 1) |
| filter |
Alpha(opacity=40) |
Die Transparenz Angabe für den Internet Explorer (Von 0 - 100) |
| opacity |
0.4 |
Die Transparenz Angabe für den Opera (Von 0 - 1) |
Das HTML
Das HTML besteht eigentlich nur aus einem Element. Dieses bekommt die Bilder als Hintergrund.
1 | <p id="imageline"></p>
|
Dieses Element bekommt die ID imageline, damit das JavaScript das Element findet.
Das JavaScript
Mit einem kleinen Umbau geht das natürlich auch mit Texten usw. Die Idee für die Bilder fand ich allerdings am Besten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | <script type="text/javascript">
function imageLine()
{
var checkInterval = null,
imageLineInterval = null,
currentImage = -1;
/*
Variablen die man in
verschiedenen Funktionen benötigt
*/
images = new Array(
'../../../image/image1.jpg',
'../../../image/image2.jpg',
'../../../image/image3.jpg',
'../../../image/image4.jpg'
// Diese Bilder sind die standard Windows XP Bilder
);
// Alle Bilder die angezeigt werden sollen
loadingImages = new Array();
// Dieses Array enthält später alle Objekte
this.run = function()
{
checkInterval = window.setInterval('this.checkIfLoaded();', 100);
// Alle 100 Millisekunden prüfen ob alle Bilder geladen sind
for(i = 0;i < images.length;i++)
{
image = images[i];
loadingImages.push(new Image);
loadingImages[i].src = image;
}
/*
Alle Images in dem Array einzeln Durchgehen.
Das Array für die Objekte mit den Objekten füllen.
Dem neuen Objekt die Url des momentanen Bildes geben.
*/
}
this.checkIfLoaded = function()
{
allLoaded = true;
for(i = 0;i < loadingImages.length;i++)
{
loadingImage = loadingImages[i];
if(!loadingImage.complete)
allLoaded = false;
}
/*
Alle Objekte durchgehen.
Prüfen ob das aktuelle Objekt / Bild geladen ist.
Falls nicht dann die Variable zur Prüfung auf false setzen
*/
if(allLoaded)
{
// Wenn alle Objekte / Bilder geladen sind
// Die Interval für das Prüfen löschen
window.clearInterval(checkInterval);
// Das erste Bild anzeigen
this.startImageLine();
// Die Funktion für das Bilder wechseln alle 10 Sekunden ausführen
window.setInterval('this.startImageLine();', 10000);
}
}
this.startImageLine = function()
{
this.showImage();
// Bild anzeigen
if(currentImage == (loadingImages.length - 1))
currentImage = 0;
else
currentImage += 1;
/*
Aktuelles Bild um eins hochzählen.
Sollte das momentane Bild genau so groß sein,
wie das Array dann wieder beim ersten anfangen.
*/
element = document.getElementById('imageline');
// Element für die Bilderanzeige
element.style.height = loadingImages[currentImage].height + 'px';
element.style.width = loadingImages[currentImage].width + 'px';
// Dem Element die Breite und Höhe des momentanen Bildes geben
element.style.backgroundImage = 'url(' + loadingImages[currentImage].src + ')';
// Dem Element das aktuelle Bild als Hintergrundbild setzen
window.setTimeout('this.hideImage();', 9500);
// Das Bild in 9,5 Sekunden ausblenden
}
this.hideImage = function()
{
element = document.getElementById('imageline');
for(i = 0;i <= 100;i++)
window.setTimeout('element.style.filter = "Alpha(opacity=' + (100 - i) + ')"; element.style.MozOpacity = ' + (1 - i / 100) + '; element.style.opacity = ' + (1 - i / 100) + ';', i * 5);
// Von 0 bis 100 (Prozent)
// Das i * 5 dient dazu, dass das Ausblenden nicht zu schnell geht
}
this.showImage = function()
{
element = document.getElementById('imageline');
for(i = 0;i <= 100;i++)
window.setTimeout('element.style.filter = "Alpha(opacity=' + i + ')"; element.style.MozOpacity = ' + i / 100 + '; element.style.opacity = ' + i / 100 + ';', i * 5);
// Hier das selbe wie bei hideImage
}
this.run();
}
window.onload = function()
{
imageLine();
}
</script>
<p id="imageline"></p>
|







Anfrage Bildergröße
Wie kann ich die Bildergrösse verändern?
element.style.height=loadingImages[currentImage].height+'px';element.style.width=loadingImages[currentImage].width+'px';
Es müsste wenn ja dann der wert z.b. 100 vor px eingetragen werden oder?
Wer kann mir helfen vielen Dank
Face
Re: Anfrage Bildergröße
Es ist doch nirgends im Quelltext eine Bildergröße angegeben? Außerdem sollte man das eher mit einem Framework lösen.
Re: Anfrage Bildergröße
Oh doch... Seinen eigenen Code nicht kennen ist auch gut... Aber unabhängig davon wird doch die Größe vom Bild schon abgefragt. Daher sollte da auch 100px sein, wenn deine Bilder 100 Pixel groß sind
hintergrundfarbe
hi,
wie kann ich in diesem script die hintergrundfarbe ändern. also so dass, die bilder nicht ins weiss ausfaden sondern zum beispiel schwarz.
danke für alle antworten :)
grüße
Link zu jedem einzelnen Bild???
Hallo,
bin noch nicht besonders bewandert in Javascript (aber was nicht ist, kann ja noch werden). Ich finde dieses Script super, und fände es noch besser, wenn man für jedes einzelnes Bild einen Link einbauen könnte, sodass jedes Bild einen eigenen Link hat. Geht das? Wenn ja, wie?
Vielen Dank im Voraus.
Re: Link zu jedem einzelnen Bild???
Du könntest zusätzlich einen Link setzen der so hoch und breit (in Verbindung mit display:block) wie das Bild ist. Den musst du halt immer ändern bei jedem Bildwechsel.
Re: Link zu jedem einzelnen Bild???
Hmmm...
ginge vielleicht auch:
[...]
images=newArray(
image[01]='../../../image/image1.jpg',
image[02]='../../../image/image2.jpg',
image[03]='../../../image/image3.jpg',
image[04]'../../../image/image4.jpg');
imagelinks=newArray(
imagelink[01]='http://image1.de'
imagelink[02]='http://image2.de'
usw.
[...]
oder so ähnlich??? Bestimmt müsste man dann aber irgendwo anders im Code das Bild und den jeweiligen Link "verbinden", oder?
Danke!
Re: Link zu jedem einzelnen Bild???
Nicht ganz so. Probier doch einfach mal rum. Ist ansich ein relativ guter Ansatz.
2 Bilder nebeneinander
Hallo allerseits!
Grundsätzlich ist das echt eine schöne Anleitung und ich habe bereits einen Teil zustande gebracht.
Leider schaffe ich es nicht zwei Bilderfunktionen nebeneinander laufen zu lassen. Ich habe es bereits über die Positionierung versucht bzw. auch über eine Tabelle – einfach um zu sehen ob es funktioniert... aber leider ist dem nicht so. Die Id habe ich abgeändert auf imageline2... im Code habe ich dann ebenfalls noch eine Änderung vorgenommen. zb bei: element = document.getElementById('imageline2');
Kann mir vielleicht jemand in diesem Fall weiterhelfen?
Freue mich auf eure Hilfe!!
Danke
Re: 2 Bilder nebeneinander
Du müsstest den Namen der ID auslagern, damit du den Namen dann als Parameter bei der Funktion übergeben kannst.
Re: 2 Bilder nebeneinander
Hallo!
Leider verstehe ich gerade Bahnhof. Wie lagere ich nun den Namen der ID aus? Ich steh vermutlich grad am Schlauch...
Re: 2 Bilder nebeneinander
Idealerweise hätte ich am Schluss 4 Bilder - welche etwas zeitversetzt ein und ausgeblendet werden... Theoretisch bräuchte ich dafür 4 arrays, welche dann auch noch in einem bestimmten Abstand (nehme an das ist mit DIVs am besten) angeordnet sind. Die Frage für mich ist jetzt, wie ich es hinbringe, diesselben Funktionen für diese Arrays zu verwenden, sodass ich diese vier Bilder auch sehe. Bisher klappt keine einzige Änderung im Code und nur der Original-code zeigt eben das eine Bild. Für Hilfe wäre ich überaus dankbar!!
FF
schöne anleitung. danke.
im IE und im opera funktioniert das ganze auch nachvollziehbar. im FF kommt bei mir das schon beschrieben flackern und er lässt bilder aus, lädt sie dann aber später. mal gibts ne pause. mal wieder nicht...
hat da jemand mit erfahung? würde mich sehr über eine problemlösung freuen.
dank
Re: FF
Ich schaus mir morgen mal an.
Re: FF
guten morgen,
heute läuft es schön und sauber; auch im FF. :) vielleicht war gestern einfach mein FF so lange an, dass er nich mehr richtig wollte...
danke trotzdem. wenns was neues gibt, meld ich mich wieder.
Titel und Einleitung
Kannst du dem Artikel noch eine Einleitung und einen Titel geben?
Re: Titel und Einleitung
Ich meine einen Informativeren Titel und auch noch eine bessere Kurzbeschreibung. In der Einleitung vielleicht auch noch schreiben was das Ziel ist.
Nur ein Bild?
Bei mir erscheint im FF2 nur ein Bild, wenn ich das JS ausprobieren. Vor dem Laden flackert es kurz. Ist das so korrekt?
Re: Nur ein Bild?
Sorry. Jetzt klappts. Die Bilder faden nach einigen Sekunden ein und aus. Schaut klasse aus. Besonders dass direkt beachtet hast, dass es für IE und FF geht finde ich super.
Re: Nur ein Bild?
Danke, sollte aber auch noch für Opera gehen ;)