Chcę ustawić obraz tła na tagu body, a następnie uruchomić kod - na przykład:
$('body').css('background-image','http://picture.de/image.png').load(function() {
alert('Background image done loading');
// This doesn't work
});
Jak mogę się upewnić, że obraz tła jest w pełni załadowany?
javascript
jquery
Piotr
źródło
źródło
Image()
obiektu, który maonload
zdarzenie.url()
Odpowiedzi:
Spróbuj tego:
stworzy to nowy obraz w pamięci i użyje zdarzenia load do wykrycia, kiedy src jest ładowany.
źródło
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)'); }))
i sprawdź żądania HTTP w Firebug. Jeśli otworzyłem stronę migotania z tym obrazem otwartym w innej karcie, nie wysyła żadnych żądań HTTP, po prostu natychmiast wyświetla to zdjęcie. a kiedy wyczyściłem pamięć podręczną i uruchomiłem ją, było jedno żądanie..remove()
na$('<img/>')
obiekt, aby uniknąć wycieku pamięci. Powinieneś zobaczyć stabilne zużycie pamięci w pierwszym teście i wzrost pamięci w drugim. Po kilku godzinach pracy na Chrome 28 pierwszy test zajmuje 80 MB, a drugi 270 MB.Mam wtyczkę jQuery o nazwie,
waitForImages
która może wykryć, kiedy obrazy tła zostały pobrane.źródło
each
wywołania zwrotnego.delay()
tak nie działa.Coś takiego:
źródło
bg.replace( ... , my_src )
. Ale moje pytanie brzmi: po załadowaniu $ ('<img>'), co dokładnie się z tym dzieje<img>
... Mam na myśli to, że tak naprawdę nie jest - to tylko fikcyjny symbol zastępczy, prawda?<img>
Nie jest włożona do DOM; służy tylko do "oszukiwania" przeglądarki, aby załadowała plik obrazu do pamięci podręcznej.Nie ma wywołań zwrotnych JS dla zasobów CSS.
źródło
czyste rozwiązanie JS, które doda moduł ładowania wstępnego, ustawi obraz tła, a następnie skonfiguruje go pod kątem zbierania elementów bezużytecznych wraz z odbiornikiem zdarzeń :
Krótka wersja:
Nieco dłużej z ładnym przejściem krycia:
źródło
Oto mała wtyczka, którą stworzyłem, aby umożliwić ci dokładnie to, działa również na wielu obrazach tła i wielu elementach:
Przeczytaj artykuł:
http://catmull.uk/code-lab/background-image-loaded/
lub przejdź bezpośrednio do kodu wtyczki:
http://catmull.uk/downloads/bg-loaded/bg-loaded.js
Więc po prostu dołącz wtyczkę, a następnie wywołaj ją w elemencie:
Oczywiście pobierz wtyczkę i zapisz ją na własnym hostingu.
Domyślnie dodaje dodatkową klasę „bg-load” do każdego dopasowanego elementu po załadowaniu tła, ale możesz to łatwo zmienić, przekazując mu inną funkcję, taką jak ta:
Oto kodepen pokazujący, że działa.
http://codepen.io/catmull/pen/Lfcpb
źródło
Znalazłem rozwiązanie, które działało lepiej dla mnie i które ma tę zaletę, że można je używać z kilkoma obrazami (przypadek nie jest zilustrowany w tym przykładzie).
Z odpowiedzi @ adeneo na to pytanie :
źródło
Zrobiłem czysty hack javascript, aby to umożliwić.
Lub
css:
źródło
https://github.com/alexanderdickson/waitForImages
źródło