Достаточно ли написанной ниже функции для предварительной загрузки изображений в большинстве, если не во всех браузерах, обычно используемых сегодня?
function preloadImage(url)
{
var img=new Image();
img.src=url;
}
У меня есть массив URL-адресов изображений, которые я зацикливаю и вызываю preloadImage
функцию для каждого URL-адреса.
javascript
Франциск
источник
источник
img
объект, например, в массиве в родительской области видимости.(new Image()).src = url;
new Image().src = url;
Ответы:
Да. Это должно работать во всех основных браузерах.
источник
Попробуйте это, я думаю, что это лучше.
Источник: http://perishablepress.com/3-ways-preload-images-css-javascript-ajax/
источник
onload
обработчика для любого из изображенийonload
состояние, или вы просто создаете изображения в памяти.for (var i = 0.....
var
В моем случае было полезно добавить функцию обратного вызова для
onload
события:А затем оберните его для случая массива URL-адресов к изображениям, которые должны быть предварительно загружены с обратным вызовом на все готово: https://jsfiddle.net/4r0Luoy7/
источник
Альтернатива CSS2: http://www.thecssninja.com/css/even-better-image-preloading-with-css2
Альтернатива CSS3: https://perishablepress.com/preload-images-css3/ (H / T Linh Dam)
ПРИМЕЧАНИЕ. Изображения в контейнере
display:none
могут не загружаться предварительно. Возможно видимость: скрытый будет работать лучше, но я не проверял это. Спасибо Marco Del Valle за указание на этоисточник
display: none
не будут предварительно загружаться.display: none
, (2) не использовалwidth/height: 0
, (3) путno-repeat
и положение, такое, что изображение будет снаружи (-<width>px -<height>px
приведет вас туда, так что если ваши изображения все 100px в высота или меньше, вы можете использовать0 -100px
, другими словамиurl(...) no-repeat 0 -100px
.Я рекомендую вам использовать try / catch, чтобы предотвратить некоторые возможные проблемы:
ООП:
Стандарт:
Кроме того, хотя я люблю DOM, старые глупые браузеры могут иметь проблемы с вами, используя DOM, поэтому избегайте этого вообще ИМХО вопреки вкладу freedev. Image () имеет лучшую поддержку в старых мусорных браузерах.
источник
Этот подход немного сложнее. Здесь вы храните все предварительно загруженные изображения в контейнере, может быть div. И после вы можете показать изображения или переместить его в DOM в правильное положение.
Попробуйте здесь , я также добавил несколько комментариев
источник
источник
Да, это будет работать, однако браузеры будут ограничивать (между 4-8) фактические вызовы и, таким образом, не будут кэшировать / предварительно загружать все нужные изображения.
Лучший способ сделать это - вызвать onload перед использованием изображения следующим образом:
источник
Вот мой подход:
источник
Решение для браузеров, совместимых с ECMAScript 2017
Примечание: это также будет работать, если вы используете транспортер, такой как Babel.
Вы также могли дождаться загрузки всех изображений.
Или используйте,
Promise.all
чтобы загрузить их параллельно.Подробнее об обещаниях .
Подробнее о функциях "Async" .
Подробнее о деструктурирующем задании .
Подробнее о ECMAScript 2015 .
Подробнее о ECMAScript 2017 .
источник
Я могу подтвердить, что подход в вопросе достаточен для запуска загрузки и кэширования изображений (если только вы не запретили браузеру делать это через заголовки ответа), по крайней мере, в:
Чтобы проверить это, я сделал небольшое веб-приложение с несколькими конечными точками, каждое из которых спит в течение 10 секунд, а затем подает фотографию котенка. Затем я добавил две веб-страницы, одна из которых содержала
<script>
тег, в котором каждый из котят предварительно загружен с использованиемpreloadImage
функции из вопроса, а другая - всех котят на странице, используя<img>
тегов.Во всех браузерах, указанных выше, я обнаружил, что если я сначала зашел на страницу предварительного загрузчика, немного подождал, а затем зашел на страницу с
<img>
тегами, мои котята рендерились мгновенно. Это показывает, что предварительный загрузчик успешно загрузил котят в кеш во всех протестированных браузерах.Вы можете посмотреть или опробовать приложение, которое я использовал для проверки этого, на https://github.com/ExplodingCabbage/preloadImage-test .
В частности, обратите внимание, что этот метод работает в указанных выше браузерах, даже если количество зацикленных изображений превышает количество параллельных запросов, которые браузер хочет сделать за раз, вопреки тому, что предлагает ответ Робина . Скорость предварительной загрузки ваших изображений, конечно, будет ограничена количеством параллельных запросов, которые браузер желает отправить, но это конечном итоге будет запрашивать каждый URL-адрес изображения, на который вы звоните
preloadImage()
.источник
Вы можете переместить этот код в index.html для предварительной загрузки изображений с любого URL
источник
Браузер будет работать лучше всего, используя тег ссылки в заголовке.
источник