Blenden Sie die Bilder ein, nachdem sie geladen wurden

8

Ich habe diesen Code gefunden, um den gewünschten Effekt zu erzielen und habe ihn auf JSFiddle

ausprobiert

Ссылка

Es scheint zu funktionieren, dass es das Bild nach dem Laden verblasst. Dann habe ich es auf einer Webseite versucht und es funktionierte nicht auf die gleiche Weise, indem ich das Bild zuerst lud, anstatt es einzublenden. Obwohl es manchmal so aussah, als ob es zur selben Zeit eingeblendet wurde, als es geladen wurde.

Gibt es einen zuverlässigeren Weg, dies zu erreichen, vorzugsweise durch Änderung dieses Codes, wenn möglich?

    
Andy 23.03.2012, 20:00
quelle

6 Antworten

34

Der einzige zuverlässige Weg zu fadeIn() einem Bild, das sich in Ihrem tatsächlichen HTML-Markup befindet, ist, einen onload -Handler im HTML-Markup wie folgt zu setzen:

%Vor%

Arbeitsdemo hier: Ссылка

Wenn Sie so vorgehen, müssen Sie nicht jedem Bild eine ID oder Klasse geben. Legen Sie einfach den Stil und den Ereignishandler im Markup fest.

Der Grund, warum Sie den Event-Handler in das Markup setzen müssen, ist, dass es zu spät sein kann, wenn Sie warten, bis das JavaScript Ihrer Seite ausgeführt wird. Das Bild ist möglicherweise bereits geladen (insbesondere wenn es sich im Browser-Cache befindet) und Sie haben möglicherweise das onload -Ereignis verpasst. Wenn Sie den Handler in das HTML-Markup einfügen, werden Sie das onload -Ereignis nicht verpassen, da der Handler zugewiesen wird, bevor das Bild geladen wird.

Wenn Sie Event-Handler nicht in das Javascript einfügen möchten, können Sie etwas tun, indem Sie einen Platzhalter für das Bild im aktuellen HTML-Code verwenden und JavaScript verwenden, um die eigentlichen Image-Tags zu erstellen und einzufügen Ziehen Sie die Bild-URL vom Platzhalter:

%Vor%

Arbeitsdemo: Ссылка

Mit der ersten Option werden Ihre Bilder ein wenig schneller geladen (weil das Laden der Bilder unmittelbar nach dem Parsen der Seite beginnt), aber die zweite Option gibt Ihnen mehr programmatische Kontrolle über den Prozess.

    
jfriend00 23.03.2012, 20:34
quelle
4

Vielleicht interessant für Leute, die diese Frage finden und angular.js verwenden:

Ich habe eine kleine Anweisung geschrieben, die den Job recht gut macht.

JS:

%Vor%

HTML:

%Vor%

Indem src nicht im HTML, sondern im directional code gesetzt wird, wird das von jfriend00 erwähnte Problem gelöst (der Handler ist angehängt, nachdem onload ausgelöst wurde).

    
dorthrithil 14.09.2015 10:17
quelle
3

html

%Vor%

Javascript

.ready () zündet nicht so, wie Sie es meinen, sehen Sie den 'load' jQuery Event-Handler

%Vor%     
DefyGravity 23.03.2012 20:18
quelle
3

Pure Java Script und CSS Lösung:

Verwenden Sie den Übergangseffekt mit Opactiy.

%Vor% %Vor%
    
Robbendebiene 25.06.2014 13:54
quelle
1

fadeIn sollte aufgerufen werden, nachdem das Bild geladen wurde. Hier ist ein Beispiel: Ссылка

    
stewe 23.03.2012 20:13
quelle
0

Hier ist ein CSS-Übergang und Javascript-Lösung basierend auf @ Jfriend00's Antwort und ähnlich dem Ansatz von @Robbendebiene:

  • bietet Fallbacks, um das Bild anzuzeigen, wenn js ausgeschaltet ist
  • nur ein Bit Inline-Javascript ist erforderlich onload="this.style.opacity=1"
  • alle Animation ist CSS, keine Notwendigkeit für jQuery oder komplexe Javascript

%Vor% %Vor%
    
squarecandy 05.02.2018 04:26
quelle

Tags und Links