2016-05-23 18 views
0

Ich habe viele Bilder auf meiner Seite, die Last als Hintergrundbild eines div wie folgt aus:Gibt es eine Möglichkeit, Inline-CSS-Hintergrundbilder nur nach dem Laden der Seite zu laden?

<div style="background-image:url('http://www.example.com/someimg.jpg');"></div> 

Und für Seitenladegeschwindigkeit Zwecke ich will nach der Seite nur all diejenigen Bild zu laden, wie wurde voll geladen.

Jetzt ich konnte nur, dass so mit einigen jQuery Hintergrundbild hinzufügen:

$(window).bind("load", function() { 
    $('div').css('background-image', 'http://www.example.com/someimg.jpg')'); 
}); 

Aber ich viele Bilder haben und ich verwende auch einige dynamische PHP diese Bilder (die Benutzer zu laden regelmäßig aktualisieren), also brauche ich eine andere Lösung, die für jedes Hintergrundbild auf der Website funktioniert.

Irgendwelche Ideen?

Danke.

+1

* "nur worden vollständig geladen, nachdem der Seite" * Was meinst du, damit? Der ** HTML ** Ihrer Seite wird entweder vollständig geladen oder wird bereits aktiv geladen. Was möchten Sie in der Warteschlange vor den Bildern sein? Skripte? –

+0

ich meinte, wenn die ganze Seite fertig geladen ist. genau wie das $ (window) .bind ("load", function() {... funktioniert. nur brauche ich eine funktion, die für alle elemente funktioniert und nicht nur für spezifische elemente, die ich manuell schreibe. – Ben

Antwort

2

Sie können dies tun, indem Sie Ihre Bilder in ein Datenattribut anstatt in ein Inline-Attribut style laden. Verwenden Sie anschließend jQuery, um alle Elemente mit diesem Datenattribut zu durchlaufen und den Wert zum Füllen des Stils zu verwenden.

z.B. HTML:

<div data-bg="https://images.unsplash.com/photo-1463123081488-789f998ac9c4?format=auto&auto=compress&dpr=1&crop=entropy&fit=crop&w=1199&h=799&q=80">Element with bg</div> 
<div>Element without bg</div> 
<div data-bg="https://images.unsplash.com/photo-1462774603919-1d8087e62cad?format=auto&auto=compress&dpr=1&crop=entropy&fit=crop&w=1199&h=799&q=80">Element with bg</div> 

jQuery:

$(window).load(function(){ 
    $('[data-bg]').each(function(){ 
    $(this).css('background','url(' + $(this).data('bg') + ')'); 
    }); 
}); 

ich dies zu demonstrieren oben geklopft: http://codepen.io/anon/pen/jqgLja

+0

Tolle Idee! Danke Ich habe gerade begonnen, diese genaue Idee zu testen :) – Ben

+0

Wird es tatsächlich die Seite schneller laden? – Ben

+0

Schließlich laden Sie immer noch alles, so dass die gesamte Seitengröße + Ressourcen gleich sind (ein paar Bytes größer wegen des neuen JS-Codes). Es wird nur die Last der bg-Bilder verschoben, bis alles andere geladen ist. CSS-bg-Bilder blockieren das Seiten-Rendering nicht, so dass es von Ihrem Anwendungsfall abhängen würde, ob es einen wahrgenommenen Vorteil für den Benutzer bietet, sein Laden aufzuheben. Wenn Sie die maximale Anzahl gleichzeitiger Anfragen (http://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser) erreichen, kann es von Vorteil sein, sie zu verschieben, aber technisch gesehen gibt es wenig Vorteile. – Dan