Non ho ancora esaminato questa tecnica specifica prima, ma è così che mi avvicinerei:
$(function() {
var src = [
"https://developer.mozilla.org/skins/mdn/Transitional/img/mdn-logo-sm.png",
"http://cdn.sstatic.net/programmers/img/logo.png?v=123",
"http://livedocs.adobe.com/flex/3/html/images/adobe.png"
];
var loaded = [];
var idx = 0;
var sz = src.length;
for(var n = 0; n < sz; ++n) {
var img = new Image();
img.onload = function() {
loaded.push(this);
if(sz === loaded.length) onLoaded();
};
img.src = src[n];
}
function onLoaded() {
$("#next").removeClass("disabled").addClass("enabled");
}
$("#next").click(function(e) {
if(!$(this).hasClass("disabled")) {
e.preventDefault();
idx = (idx + 1) % sz;
$($("img")[0]).remove();
$("#container").append(loaded[idx]);
}
});
});
link
Nel mio esempio di violino, costringo solo il client a caricare la prima immagine con il resto della pagina. Quindi, su carico jQuery ( $(function() {})
), memorizzo nella cache tutte le altre immagini che voglio visualizzare con lo script (3 immagini in questo caso).
Una volta caricata ogni immagine, la sposto in una matrice memorizzata nella cache e controlla se la dimensione della cache è uguale alla dimensione della sorgente. Se lo fa, allora chiamo onLoaded
.
Una ottimizzazione potrebbe essere semplicemente utilizzare la cache dell'immagine nella pagina piuttosto che caricarne un'altra (0 ° elemento in src
).
Naturalmente, questo può essere fatto facilmente anche con Javascript nativo, ho scelto di usare jQuery per questo esempio senza una buona ragione reale ;)