Nie musisz się martwić o ruch uliczny. Podczas inicjowania aplikacji można łatwo buforować obrazy. Zajrzyj do mojego przykładu w następującym JSFiddle: http://jsfiddle.net/pAwdC/. Podczas inicjowania aplikacji dzwonię pod numer loadImages
. Ta metoda tworzy element DOM img
dla każdej cyfry. To src
pochodzi z tablicy imagesSrc
.Gdy funkcja loadImages
nazywa przeglądarka jest wykonanie kilku żądań HTTP GET do serwera:
Właściwie każdy wniosek został złożony, gdy:
current.src = imagesSrc[i];
jest wykonywany.
Po załadowaniu zdjęć, po prostu je ukrywam. Kiedy obrazy są z display: none
lub visibility: hidden
, użytkownik nie może ich zobaczyć, ale gdy te ukryte elementy są widoczne, nie są już tworzone żadne żądania, a jedynie końcowa wersja przeglądarki jest wykonywana tylko w trybie repaint, reflow/relayout, restyle. Wszystkie elementy są buforowane i wyświetlane tylko w razie potrzeby. Możesz sprawdzić swój firebug lub dowolne inne narzędzie deweloperskie, którego nie potrzebujesz więcej próśb o te obrazy.
Oto kod z moim przykładzie:
var images = [],
imagesSrc = ['https://lh3.ggpht.com/-107YXK-eAXs/UB6V49H9yuI/AAAAAAAACsY/69ceZJXaYZE/s1600/number-one-.png',
'https://lh3.ggpht.com/-8rOrxAwDl48/Txf99Sus18I/AAAAAAAAL1w/VcmeP7rNFwY/s1600/number2c.png',
'https://lh3.ggpht.com/-aGatHUidcGw/UG6Oh2HdWXI/AAAAAAAADQY/yc1CTC7cpOY/s1600/number3.png'];
function loadImages() {
var current;
for (var i = 0; i < imagesSrc.length; i += 1) {
current = document.createElement('img');
current.src = imagesSrc[i];
images.push(current);
current.style.display = 'none';
document.body.appendChild(current);
}
}
function showImage() {
var current = showImage.current || 0;
if (current >= 3) {
current = 0;
}
hideImages();
images[current].style.display = 'block';
current += 1;
showImage.current = current;
setTimeout(function() {
showImage();
}, 1000);
}
function hideImages() {
for (var i = 0; i < images.length; i += 1) {
images[i].style.display = 'none';
}
}
loadImages();
showImage();
Na moim przykładzie muszę tylko jedną instancję każdej cyfry. Oczywiście dla zegara można utworzyć cztery wystąpienia (cztery elementy DOM img
DOM) dla każdej cyfry, aby można było wyświetlać duplikaty.
Dla twojej aplikacji lepszym rozwiązaniem będzie załadowanie obrazów na żądanie, ale tylko raz, a następnie ich buforowanie. Dobrze jest to zrobić, ponieważ użytkownik nie może pozostać na Twojej stronie, aby zobaczyć każdą cyfrę (od 0 do 9), a możesz nieco poprawić swoją wydajność dzięki temu leniwemu ładowaniu. W tej strategii możesz sprawdzić flyweight pattern. Jego główną ideą jest zarządzanie zestawem małych obiektów wielokrotnego użytku i używanie ich na żądanie, jednocześnie kontrolując jego tworzenie. Tutaj jest klasa diagram UML, który przedstawia strukturę wzoru:
Istnieją różne warianty podejścia wspominałem. Może być najlżejszą odmianą, jaką możesz zrobić, to użyć pojedynczego obrazu zawierającego wszystkie cyfry. Następnie możesz tworzyć różne elementy (na przykład div) o wielkości cyfry. Po ustawieniu tych elementów tło o określonej pozycji można utworzyć wszystkie cyfry, ładując tylko jeden obraz. Spowoduje to zmniejszenie liczby próśb z 10 do jednej. Takie podejście jest skutecznie wykorzystywane na przykład przez Facebook.
Jeśli potrzebujesz dalszej pomocy, chętnie pomogę.
używając ikonki i zmienić tylko pozycję tła? –
Wolałbym użyć metody, która zadziała, nawet jeśli CSS jest wyłączony, dla ułatwienia dostępu. (Tak, już aktualizuję atrybut alt, ponieważ każda cyfra jest zmieniana, ale obrazy nie przestają się wyświetlać, jeśli CSS jest ignorowany.) – Bobulous
Jeśli CSS nie działa w przeglądarce, możesz być pewien, że JavaScript też nie będzie działać . Użyj sprite'ów i nie przejmuj się tym. –