2010-04-22 8 views

Antwort

10

Diese Aktion ist asynchron; Eine Menge Code für das Vorladen von Bildern hängt von dieser Funktion ab.

EDIT: Um ein bisschen mehr nützliche Informationen zu geben. Wenn Sie bestimmte Aktionen synchron haben wollen, sind warten auf Bilder über Javascript das Bildobjekt zu laden, können Sie das Onload-Ereignis verwenden, etwa so:

var img = new Image(); 
img.onload = function() { /* onLoad code here */ }; 
img.src = 'xxxxxx'; 
+2

Beachten Sie das asynchrone Laden von Bildern beim Festlegen der Bildquelle und der Größenanpassung unmittelbar nach dem Festlegen der Bildquelle. https://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader Größe ändern könnte oder wird nicht funktionieren ... onload muss verwendet werden ... – OSP

2

var img = new Bild();

Dies ist die alte Methode zum Erstellen von Bildern, die veraltet ist. Bevorzugen Sie document.createElement('IMG') oder erstellen Sie einen durch Strings und innerHTML.

Jetzt sind Bilder replaced elements, was bedeutet, dass sie geladen werden, wann immer sie ankommen, aber Platz ist für sie im Layoutfluss reserviert, wenn ihre Abmessungen angegeben sind. (Wenn nicht, wird ein Platz in Symbolgröße reserviert und der Bildschirm wird neu gezeichnet, wenn das Bild mit seinen Abmessungen in der Kopfzeile ankommt. Dies kann eine beunruhigende Benutzererfahrung sein. Daher sollten Sie die Bilddimensionen bereithalten, während die Seite gerendert wird das erste Mal.)

+1

Veraltet? "Ja wirklich?" Ich glaube nicht, dass es überhaupt jemals Teil eines Standards war. –

+0

@Tim Down: Ich meine nur, dass dies die alte (c. 1990er) Art der Erstellung von Bildern ist, die nicht Teil der aktuellen Praxis ist. – Robusto

+0

'new Image()' funktioniert weiterhin in jedem skriptfähigen Browser, der Bilder unterstützt, und ich würde es gegenüber 'innerHTML' bevorzugen. Vereinbart, dass 'document.createElement (" IMG ")" vorzuziehen ist. –

4

ändern src ist asynchron.

Der Code

image.src = "http://newimage-url";

kehrt sofort und wird der Browser in einem anderen Thread neues Bild laden. Bevor es vollständig geladen ist, sind alle Attribute dieses Tags nicht korrekt, z. B. Breite oder Höhe.

So kann $(image).width() die neue Bildbreite möglicherweise nicht zurückgeben.

Wie @Deleaseased aufgezeigt wurde, können Sie eine 'on-load'-Methode implementieren, die erst nach dem Laden des Bildes ausgeführt wird. jQuerys load() kann dies problemlos erfüllen.

Verwandte Themen