Website Bilder hervorheben lassen - Problem

Beispiel - (Webseite, HTML, CSS)

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Hier eine etwas ausführlichere Anleitung:

Zunächst das HTML:

<img src="//lorempixel.com/output/city-q-c-200-200-9.jpg" class="small pic1" />
<img src="//lorempixel.com/output/city-q-c-200-200-8.jpg" class="small pic2" />
<img src="//lorempixel.com/output/city-q-c-200-200-7.jpg" class="small pic3" />
<img src="//lorempixel.com/output/city-q-c-200-200-6.jpg" class="small pic4" />

Jedes Bild bekommt standardmäßig die Klasse "small". In dieser steht dann:

img.small {
    position: absolute;
    width: 100px;
    height: auto;
    z-index: 1;
}

Jetzt bekommt jedes Bild seine individuelle Klasse um es zu positionieren:

.pic1 {
    top: 100px;
    left: 200px;
}

.pic2 {
    top: 100px;
    left: 300px;
}

usw.

Anstatt inline-JavaScript in jedem Bild zu verwenden, geben wir jedem Bild mit der Klasse "small" ein Event mittels "addEventListener". Wir benötigen ein Event für "mouseover" und einen für "mouseout"

    var images = document.getElementsByClassName('small') || document.querySelectorAll('small'); //Selektiert alle HTML-Elemente mit der Klasse "small"
for (var i = 0; i < images.length; i++) { //Durchläuft alle Elemente
    images[i].addEventListener('mouseover', function () { //Gibt jedem Element ein mouseOver Event
        this.className += ' big'; //Bei Mouseover wird dem Element die Klasse "big" zugewiesen
    });

    images[i].addEventListener('mouseout', function () { //Wenn man das Bild verlässt
        this.className = this.className.replace(/ big/g, ''); //Wird die Klasse "big" wieder entfernt
    });
}

Jetzt noch die Klasse "big" im CSS definieren

img.big {
    width: 150px;
    height: auto;
    z-index: 100;
}

Damit das ganze etwas ansprechender ausschaut, nutzen wir CSS3 und erweitern die Klassen "small" und "big" etwas:

img.small {
    position: absolute;
    width: 100px;
    height: auto;
    z-index: 1;
    transition: all 0.5s; /* Kontrolliert die Animationsgeschwindigkeit, Bild soll langsam größer werden*/
}

img.big {
    width: 150px;
    height: auto;
    z-index: 100;
    box-shadow: 5px 5px 5px #333333; /* Schatten hinzufügen, wenn das Bild hervorgehoben wird */
}

Und so sieht das ganze dann aus: http://fiddle.jshell.net/Pisi2012/LsDXD/


ka1995 
Beitragsersteller
 03.04.2014, 23:17

Wow, vielen Dank! :-)

Ich hätte da noch eine Frage: Wie kann ich es machen, dass die Bilder nicht nur nach rechts und unten vergrößert werden, sondern auch nach oben und links? Sodass die Mitte des Bildes weiterhin die Mitte bleibt.

Danke :-)

HorstSergio  04.04.2014, 09:30
@ka1995

Das geht auch. Dafür musst du ein DIV um das Bild packen und anstatt des Bildes, das DIV positionieren.

Take a look here: http://fiddle.jshell.net/LsDXD/2/

Das führt aber zu Problemen beim Mouseover (Bilder flackern, da man sich während der Animation mit dem Cursor zwischen zwei Bildern befindet) deshalb solltest du dort auf "transition" verzichten.

Gib einfach dem Mouseovereffekt noch einen hohen Z-Index Wert mit an. Dann sollte es gehen.


ka1995 
Beitragsersteller
 02.04.2014, 23:24

Hab ich schon probiert, funktioniert leider nur bei einzelnen Bildern. Hab ich diesen Befehl bei mehreren oder allen, ist es wie bisher.