Я хочу установить фоновое изображение для тега body, а затем запустить некоторый код, например так:
$('body').css('background-image','http://picture.de/image.png').load(function() {
alert('Background image done loading');
// This doesn't work
});
Как я могу убедиться, что фоновое изображение полностью загружено?
javascript
jquery
Питер
источник
источник
Image()
объекта, который имеетonload
событие.url()
Ответы:
попробуй это:
это создаст новое изображение в памяти и будет использовать событие load для определения момента загрузки src.
источник
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)'); }))
и проверьте HTTP-запросы в Firebug. Если я открыл страницу мерцания с этим изображением, открытым на другой вкладке, он не выполняет никаких HTTP-запросов, просто показывает эту картинку мгновенно. и когда я очищаю кеш и запускаю его, был один запрос..remove()
на$('<img/>')
объект , чтобы избежать утечек памяти. Вы должны увидеть стабильное потребление памяти в первом тесте и увеличение памяти во втором. После нескольких часов работы на Chrome 28 первый тест занимает 80 МБ, а второй - 270 МБ.У меня есть JQuery плагин называется ,
waitForImages
который может обнаружить , когда фоновые изображения загрузили.источник
each
обратного вызова.delay()
не работает так.Что-то вроде этого:
источник
bg.replace( ... , my_src )
. Но мой вопрос: как только $ ('<img>') загружается, что именно происходит с этим<img>
... Я имею в виду, что это на самом деле не реально - это просто фиктивный заполнитель, верно?<img>
Никогда не вставляется в DOM; он просто используется, чтобы «обмануть» браузер при загрузке файла изображения в кеш.Для CSS-ресурсов нет обратных вызовов JS.
источник
Чистое решение JS, которое добавит preloader, установит background-image и затем настроит его для сборки мусора вместе со слушателем событий :
Укороченная версия:
Немного дольше с хорошим переходом непрозрачности:
источник
Вот небольшой плагин, который я сделал, чтобы позволить вам сделать именно это, он также работает с несколькими фоновыми изображениями и несколькими элементами:
Прочитать статью:
http://catmull.uk/code-lab/background-image-loaded/
или перейдите прямо к коду плагина:
http://catmull.uk/downloads/bg-loaded/bg-loaded.js
Так что просто включите плагин и затем вызовите его на элементе:
Очевидно, скачать плагин и хранить его на своем собственном хостинге.
По умолчанию он добавляет дополнительный класс «bg -loaded» к каждому сопоставленному элементу после загрузки фона, но вы можете легко изменить это, передав ему другую функцию, подобную этой:
Вот кодекс, демонстрирующий его работу.
http://codepen.io/catmull/pen/Lfcpb
источник
Я нашел решение, которое работало лучше для меня, и которое имеет преимущество в том, что его можно использовать с несколькими изображениями (случай не показан в этом примере).
Из ответа @ adeneo на этот вопрос :
источник
Я сделал чистый взлом JavaScript, чтобы сделать это возможным.
Или
CSS:
источник
https://github.com/alexanderdickson/waitForImages
источник