Ich möchte ein Hintergrundbild für das Body-Tag festlegen und dann einen Code ausführen - wie folgt:
$('body').css('background-image','http://picture.de/image.png').load(function() {
alert('Background image done loading');
// This doesn't work
});
Wie kann ich sicherstellen, dass das Hintergrundbild vollständig geladen ist?
javascript
jquery
Peter
quelle
quelle
Image()
Objekt, das einonload
Ereignis hat, einfach dieselbe URL zu .url()
Antworten:
Versuche dies:
Dadurch wird ein neues Image im Speicher erstellt und mithilfe des Ladeereignisses erkannt, wann der Quellcode geladen wird.
quelle
javascript:void($('<img/>').attr('src', 'http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg').load(function() { $('html').css('background-image', 'url(http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg)'); }))
und überprüfen Sie die HTTP-Anforderungen in Firebug. Wenn ich eine Flimmern-Seite mit diesem Bild geöffnet habe, das in einem anderen Tab geöffnet wurde, werden keine HTTP-Anforderungen ausgeführt. Dieses Bild wird nur sofort angezeigt. und als ich den Cache löschte und ausführte, gab es eine Anfrage..remove()
auf$('<img/>')
Objekt einen Speicherverlust zu vermeiden. Sie sollten beim ersten Test einen stabilen Speicherverbrauch und beim zweiten einen Speicheranstieg feststellen. Nach einigen Stunden auf Chrome 28 dauert der erste Test 80 MB und der zweite 270 MB.Ich habe ein jQuery-Plugin namens
waitForImages
, das erkennen kann, wann Hintergrundbilder heruntergeladen wurden.quelle
each
Rückrufs anzuzeigen.delay()
nicht so.Etwas wie das:
quelle
bg.replace( ... , my_src )
. Aber meine Frage ist: Sobald das $ ('<img>') geladen ist, was genau passiert damit<img>
... Ich meine, es ist nicht wirklich real - es ist nur ein Dummy-Platzhalter, oder?<img>
wird niemals in das DOM eingefügt. Es wird nur verwendet, um den Browser zum Laden der Bilddatei in den Cache zu "täuschen".Es gibt keine JS-Rückrufe für CSS-Assets.
quelle
reine JS-Lösung, die Preloader hinzufügt, das Hintergrundbild festlegt und es dann zusammen mit dem Ereignis-Listener für die Garbage Collection einrichtet :
Kurzfassung:
Ein bisschen länger mit schönem Deckkraftübergang:
quelle
Hier ist ein kleines Plugin, das ich erstellt habe, damit Sie genau dies tun können. Es funktioniert auch mit mehreren Hintergrundbildern und mehreren Elementen:
Lesen Sie den Artikel:
http://catmull.uk/code-lab/background-image-loaded/
oder gehen Sie direkt zum Plugin-Code:
http://catmull.uk/downloads/bg-loaded/bg-loaded.js
Fügen Sie einfach das Plugin hinzu und rufen Sie es dann für das Element auf:
Laden Sie das Plugin herunter und speichern Sie es auf Ihrem eigenen Hosting.
Standardmäßig wird jedem übereinstimmenden Element eine zusätzliche "bg-geladene" Klasse hinzugefügt, sobald der Hintergrund geladen ist. Sie können dies jedoch leicht ändern, indem Sie ihm eine andere Funktion wie die folgende übergeben:
Hier ist ein Codepen, der die Funktionsweise demonstriert.
http://codepen.io/catmull/pen/Lfcpb
quelle
Ich habe eine Lösung gefunden, die für mich besser funktioniert und die den Vorteil hat, dass sie mit mehreren Bildern verwendet werden kann (Fall in diesem Beispiel nicht dargestellt).
Aus der Antwort von @ adeneo auf diese Frage :
quelle
Ich habe einen reinen Javascript-Hack durchgeführt, um dies zu ermöglichen.
Oder
CSS:
quelle
https://github.com/alexanderdickson/waitForImages
quelle