Reicht die unten beschriebene Funktion aus, um Bilder in den meisten, wenn nicht allen heute gebräuchlichen Browsern vorzuladen?
function preloadImage(url)
{
var img=new Image();
img.src=url;
}
Ich habe eine Reihe von Bild-URLs, die ich durchlaufe und die preloadImage
Funktion für jede URL aufrufe.
javascript
Francisc
quelle
quelle
img
Objekt bei, z. B. in einem Array im übergeordneten Bereich.(new Image()).src = url;
new Image().src = url;
Antworten:
Ja. Dies sollte in allen gängigen Browsern funktionieren.
quelle
Versuchen Sie das, ich denke, das ist besser.
Quelle: http://perishablepress.com/3-ways-preload-images-css-javascript-ajax/
quelle
onload
Handler für eines der Bilderonload
Status umgehen oder Sie instanziieren nur Bilder im Speicher.for (var i = 0.....
var
In meinem Fall war es nützlich, Ihrer Funktion einen Rückruf für das
onload
Ereignis hinzuzufügen :Und dann wickeln Sie es für den Fall ein Array von URLs zu Bildern ein, die mit Rückruf auf alle vorinstalliert werden sollen: https://jsfiddle.net/4r0Luoy7/
quelle
CSS2-Alternative: http://www.thecssninja.com/css/even-better-image-preloading-with-css2
CSS3-Alternative: https://perishablepress.com/preload-images-css3/ (H / T Linh Dam)
HINWEIS: Bilder in einem Container mit werden
display:none
möglicherweise nicht vorgeladen. Vielleicht Sichtbarkeit: versteckt funktioniert besser, aber ich habe dies nicht getestet. Vielen Dank an Marco Del Valle für diesen Hinweisquelle
display: none
werden nicht vorgeladen.display: none
, (2) habe nicht verwendetwidth/height: 0
, (3) gesetztno-repeat
und eine Position, bei der sich das Bild außerhalb befindet (-<width>px -<height>px
bringt Sie dorthin, wenn Ihre Bilder alle 100 Pixel groß sind) Höhe oder weniger können Sie mit0 -100px
anderen Worten verwendenurl(...) no-repeat 0 -100px
.Ich empfehle Ihnen, try / catch zu verwenden, um mögliche Probleme zu vermeiden:
OOP:
Standard:
Auch wenn ich DOM liebe, können alte dumme Browser Probleme mit der Verwendung von DOM haben. Vermeiden Sie es daher IMHO im Gegensatz zu freedevs Beitrag. Image () unterstützt in alten Papierkorbbrowsern besser.
quelle
Dieser Ansatz ist etwas ausgefeilter. Hier speichern Sie alle vorinstallierten Bilder in einem Container, möglicherweise ein div. Und nachdem Sie die Bilder anzeigen oder innerhalb des DOM an die richtige Position verschieben konnten.
Probieren Sie es hier aus , ich habe auch einige Kommentare hinzugefügt
quelle
quelle
Ja dies funktionieren wird, jedoch wird Browser begrenzen (zwischen 4-8) die tatsächlichen Anrufe und somit nicht cache / Vorbelastung alle gewünschten Bilder.
Eine bessere Möglichkeit, dies zu tun, besteht darin, onload aufzurufen, bevor Sie das Bild wie folgt verwenden:
quelle
Hier ist mein Ansatz:
quelle
Lösung für ECMAScript 2017-kompatible Browser
Hinweis: Dies funktioniert auch, wenn Sie einen Transpiler wie Babel verwenden.
Sie hätten auch warten können, bis alle Bilder geladen sind.
Oder verwenden Sie
Promise.all
, um sie parallel zu laden.Mehr über Versprechen .
Weitere Informationen zu "Async" -Funktionen .
Mehr zum Destrukturierungsauftrag .
Mehr zu ECMAScript 2015 .
Mehr zu ECMAScript 2017 .
quelle
Ich kann bestätigen, dass der Ansatz in der Frage ausreicht, um das Herunterladen und Zwischenspeichern der Bilder auszulösen (es sei denn, Sie haben dem Browser dies über Ihre Antwortheader verboten), zumindest in:
Um dies zu testen, habe ich eine kleine Webanwendung mit mehreren Endpunkten erstellt, die jeweils 10 Sekunden lang schlafen, bevor ich ein Bild eines Kätzchens serviere. Dann habe ich zwei Webseiten hinzugefügt, von denen eine ein
<script>
Tag enthielt, auf dem jedes der Kätzchen mit derpreloadImage
Funktion aus der Frage vorinstalliert ist , und die andere alle Kätzchen auf der Seite mit<img>
Tags enthält.In allen oben genannten Browsern stellte ich fest, dass
<img>
meine Kätzchen sofort gerendert wurden , wenn ich zuerst die Preloader-Seite besuchte, eine Weile wartete und dann zur Seite mit den Tags ging. Dies zeigt, dass der Preloader die Kätzchen in allen getesteten Browsern erfolgreich in den Cache geladen hat.Sie können die Anwendung, mit der ich dies getestet habe, unter https://github.com/ExplodingCabbage/preloadImage-test sehen oder ausprobieren .
Beachten Sie insbesondere, dass diese Technik in den oben genannten Browsern auch dann funktioniert, wenn die Anzahl der Bilder, die durchlaufen werden, die Anzahl der parallelen Anforderungen überschreitet, die der Browser gleichzeitig bereit ist, entgegen Robins Antwort . Die Geschwindigkeit , mit der Sie Ihre Bilder Vorspannung wird natürlich durch , wie viele parallele begrenzt werden ersucht den Browser zu senden bereit ist, aber es wird verlangen schließlich jedes Bild URL Sie rufen
preloadImage()
auf.quelle
Sie können diesen Code in die Datei index.html verschieben, um Bilder von einer beliebigen URL vorab zu laden
quelle
Der Browser funktioniert am besten mit dem Link-Tag im Kopf.
quelle