У меня есть скрытая контактная форма, которая открывается при нажатии на кнопку. Его поля устанавливаются как фоновые изображения CSS, и они всегда появляются немного позже, чем выбранный div.
Я использовал этот фрагмент в <head>
разделе, но безуспешно (после очистки кеша):
<script>
$(document).ready(function() {
pic = new Image();
pic2 = new Image();
pic3 = new Image();
pic.src="<?php bloginfo('template_directory'); ?>/images/inputs/input1.png";
pic2.src="<?php bloginfo('template_directory'); ?>/images/inputs/input2.png";
pic3.src="<?php bloginfo('template_directory'); ?>/images/inputs/input3.png";
});
</script>
Я использую jQuery в качестве своей библиотеки, и было бы здорово, если бы я мог использовать его также для решения этой проблемы.
Спасибо за вашу мысль.
Ответы:
Предварительная загрузка изображений только с использованием CSS
В приведенном ниже коде я случайным образом выбираю
body
элемент, поскольку это один из немногих элементов, которые гарантированно существуют на странице.Чтобы «трюк» сработал, мы будем использовать
content
свойство, которое удобно позволяет установить несколько URL-адресов для загрузки, но, как показано,::after
псевдоэлемент скрыт, поэтому изображения не будут отображаться:Демо
лучше использовать изображение спрайта, чтобы уменьшить количество HTTP-запросов ... (если есть много изображений относительно небольшого размера) и убедитесь, что изображения размещены там, где используется HTTP2 .
источник
body
, поскольку эти изображения будут загружены на каждую страницу, которая ссылается на таблицу стилей. Вместо этого вы должны использовать.contact_form:after {...}
или какой-либо другой менее глобальный класс. Если, конечно, ваша контактная форма есть на каждой странице;)Я могу подтвердить, что мой исходный код работает. Я случайно придерживался изображения с неправильным путем.
Вот тест: http://paragraphe.org/slidetoggletest/test.html
источник
Предварительная загрузка изображений с использованием тега HTML <link>
Я считаю, что большинство посетителей этого вопроса ищут ответ «Как я могу предварительно загрузить изображение до начала рендеринга страницы?» и лучшим решением этой проблемы является использование
<link>
тега, потому что<link>
тег может блокировать дальнейшее отображение страницы. См. УпреждающийЭти два варианта значений атрибута
rel
( отношения между текущим документом и связанным документом ) наиболее актуальны для данной проблемы:Поэтому, если вы хотите загрузить ресурс ( в данном случае изображение ) до начала процесса рендеринга
<body>
тега, используйте:и если вы хотите загрузить ресурс во время
<body>
рендеринга, но планируете использовать его позже динамически и не хотите беспокоить пользователя временем загрузки, используйте:источник
prefetch
тогда, когда браузер находится в режиме ожидания, что определяетсяnsIWebProgressListener
API. См. Это для получения дополнительной информации.<link rel="preload">
это не блок рендеринга, я считаю , что автор неправильно определение. Из MDN Preloading content with rel = "preload" , "... который вы хотите начать загружать на ранней стадии жизненного цикла страницы, до того, как сработает основной механизм рендеринга браузеров". Идея состоит в том, что ресурсы извлекаются как можно скорее, что повышает вероятность того, что ресурс будет доступен, когда это необходимо, например, когда<img>
элемент отрисовывается.http://css-tricks.com/snippets/css/css-only-image-preloading/
Техника # 1
Загрузите изображение в обычное состояние элемента, сместите его только с положением фона. Затем переместите положение фона, чтобы отображать его при наведении.
Техника # 2
Если к рассматриваемому элементу уже применено фоновое изображение, и вам нужно изменить это изображение, вышеуказанное не сработает. Обычно вы выбираете здесь спрайт (комбинированное фоновое изображение) и просто меняете положение фона. Но если это невозможно, попробуйте это. Примените фоновое изображение к другому элементу страницы, который уже используется, но не имеет фонового изображения.
источник
попробуйте с этим:
С помощью этого кода вы предварительно загружаете фоновое изображение и визуализируете форму при ее загрузке.
источник
Для предварительной загрузки фоновых изображений, установленных с помощью CSS, наиболее эффективным ответом, который я придумал, была измененная версия некоторого кода, который, как я обнаружил, не работал:
Огромным преимуществом этого является то, что вам не нужно обновлять его, когда вы добавляете новые фоновые изображения в будущем, он найдет новые и предварительно загрузит их!
источник
Если вы повторно используете эти изображения bg где-либо еще на своем сайте для ввода формы, вы, вероятно, захотите использовать спрайт изображения. Таким образом, вы можете централизованно управлять своими изображениями (вместо pic1, pic2, pic3 и т. Д.).
Спрайты обычно работают быстрее для клиента, поскольку они запрашивают с сервера только один (хотя и немного большего размера) файл, а не несколько файлов. См. Статью SO для получения дополнительных преимуществ:
CSS-спрайты изображений
Опять же, это может быть вообще бесполезно, если вы просто используете их для одной формы и действительно хотите загружать их только в том случае, если пользователь запрашивает контактную форму ... хотя это может иметь смысл.
http://www.alistapart.com/articles/sprites
источник
как насчет загрузки этого фонового изображения где-нибудь скрыто. Таким образом, он будет загружен при открытии страницы и не будет занимать какое-либо время после создания формы с использованием ajax:
источник
Вы можете использовать этот плагин jQuery waitForImage, или вы можете поместить изображения в скрытый div или (ширина: 0 и высота: 0) и использовать событие onload для изображений.
Если у вас есть только 2-3 изображения, вы можете связывать события и запускать их в цепочку, чтобы после каждого изображения вы могли выполнять некоторый код.
источник
Единственный способ - закодировать изображение в Base64 и поместить его в HTML-код, чтобы ему не приходилось связываться с сервером для загрузки изображения.
Это закодирует изображение с URL-адреса, чтобы вы могли скопировать код файла изображения и вставить его на свою страницу так ...
источник
Когда нет возможности изменить код CSS и предварительно загрузить изображения с помощью правил CSS для
:before
или:after
псевдоэлементов, можно использовать другой подход с кодом JavaScript, пересекающим правила CSS загруженных таблиц стилей. Для того, чтобы он работал, скрипты должны быть включены после таблиц стилей в HTML, например, перед закрывающимbody
тегом или сразу после таблиц стилей.источник
Если элементы страницы и их фоновые изображения уже находятся в DOM (т.е. вы не создаете / не изменяете их динамически), то их фоновые изображения уже будут загружены. На этом этапе вы можете захотеть взглянуть на методы сжатия :)
источник