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.

 
HTML
1
<p id="imageline"></p>

Dieses Element bekommt die ID imageline, damit das JavaScript das Element findet.

Das JavaScript

Bild zu Bildershow: Langsames ein- und Ausblenden von Bildern
Bild zu Bildershow: Langsames ein- und Ausblenden von Bildern
Bild zu Bildershow: Langsames ein- und Ausblenden von Bildern
Bild zu Bildershow: Langsames ein- und Ausblenden von Bildern

Mit einem kleinen Umbau geht das natürlich auch mit Texten usw. Die Idee für die Bilder fand ich allerdings am Besten.

 
JavaScript
  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>
hat Erfahrungen im Webentwicklungs-Bereich seit mehr als 8 Jahren. Arbeitet als Webentwickler bei einem Verlag in Stuttgart.
Profilseite betrachten

Kommentare: Bildershow: Langsames ein- und Ausblenden von Bildern

Neuen Kommentar schreiben
Anfrage Bildergröße
Beantworten

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

face71 am 15.02.2011 um 09:08
Re: Anfrage Bildergröße
Beantworten

Es ist doch nirgends im Quelltext eine Bildergröße angegeben? Außerdem sollte man das eher mit einem Framework lösen.

Fabian "q-rios" Krause-Willenberg am 15.02.2011 um 09:30
Re: Anfrage Bildergröße
Beantworten

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

Fabian "q-rios" Krause-Willenberg am 15.02.2011 um 09:32
hintergrundfarbe
Beantworten

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

manuva am 09.06.2010 um 17:08
Link zu jedem einzelnen Bild???
Beantworten

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.

Benutzer gelöscht am 11.05.2010 um 16:30
Re: Link zu jedem einzelnen Bild???
Beantworten

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.

Fabian "q-rios" Krause-Willenberg am 11.05.2010 um 17:38
Re: Link zu jedem einzelnen Bild???
Beantworten

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!

Benutzer gelöscht am 11.05.2010 um 18:16
Re: Link zu jedem einzelnen Bild???
Beantworten

Nicht ganz so. Probier doch einfach mal rum. Ist ansich ein relativ guter Ansatz.

Fabian "q-rios" Krause-Willenberg am 11.05.2010 um 19:04
2 Bilder nebeneinander
Beantworten

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

grafica am 14.03.2010 um 16:19
Re: 2 Bilder nebeneinander
Beantworten

Du müsstest den Namen der ID auslagern, damit du den Namen dann als Parameter bei der Funktion übergeben kannst.

Fabian "q-rios" Krause-Willenberg am 14.03.2010 um 19:07
Re: 2 Bilder nebeneinander
Beantworten

Hallo!

Leider verstehe ich gerade Bahnhof. Wie lagere ich nun den Namen der ID aus? Ich steh vermutlich grad am Schlauch...

grafica am 20.03.2010 um 17:14
Re: 2 Bilder nebeneinander
Beantworten

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!!

grafica am 21.03.2010 um 10:58
FF
Beantworten

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

radi am 24.04.2008 um 21:56
Re: FF
Beantworten

Ich schaus mir morgen mal an.

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

Fabian "q-rios" Krause-Willenberg am 25.04.2008 um 00:25
Re: FF
Beantworten

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.

Ich schaus mir morgen mal an.

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

radi am 25.04.2008 um 08:20
Titel und Einleitung
Beantworten

Kannst du dem Artikel noch eine Einleitung und einen Titel geben?

Thomas H am 03.01.2008 um 16:05
Re: Titel und Einleitung
Beantworten

Ich meine einen Informativeren Titel und auch noch eine bessere Kurzbeschreibung. In der Einleitung vielleicht auch noch schreiben was das Ziel ist.

Thomas H am 03.01.2008 um 16:06
Nur ein Bild?
Beantworten

Bei mir erscheint im FF2 nur ein Bild, wenn ich das JS ausprobieren. Vor dem Laden flackert es kurz. Ist das so korrekt?

Fabian Ziegler am 27.12.2007 um 10:26
Re: Nur ein Bild?
Beantworten

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.

Fabian Ziegler am 27.12.2007 um 10:28
Re: Nur ein Bild?
Beantworten

Danke, sollte aber auch noch für Opera gehen ;)

Fabian "q-rios" Krause-Willenberg am 27.12.2007 um 14:48