Предварительная загрузка изображений в HTML, есть ли более современный способ?
У меня есть изображение, загруженное JS на событие мыши. Это довольно большое изображение, поэтому я хочу убедиться, что он загружен заранее. Я несколько раз использовал некоторые старые методы и нашел этот пример:
<SCRIPT LANGUAGE = JAVASCRIPT>
if (document.images)
{
img1 = new Image();
img2 = new Image();
img1.src = "imageName1.gif";
img2.src = "imageName2.gif"
}
</SCRIPT>
Я задавался вопросом, хорошо ли это/актуально, или, может быть, браузеры автоматически обнаруживают неиспользуемые изображения и предварительно загружают их? Обратите внимание, что моя страница должна поддерживать IE6, поэтому мне все равно понадобятся старые методы, но мне все еще интересно, есть ли у более современных браузеров лучший способ?
Ответы
Ответ 1
Нет, это он. Зачем менять что-то, что работает?
Но более правильное использование похоже на это
(function() {
var img1 = new Image();
var img2 = new Image();
img1.src = "imageName1.gif";
img2.src = "imageName2.gif"
})();
или просто
new Image().src = "imageName1.gif";
new Image().src = "imageName2.gif"
Оба этих метода избегают загромождения глобальной области с помощью переменных.
И language="JavaScript"
устарел. Используйте type="text/javascript"
.
Ответ 2
Зависит от того, какие изображения, о которых вы говорите, значки/кнопки и т.д., можно выполнить с помощью метода CSS Sprites.
http://www.alistapart.com/articles/sprites
Ответ 3
Это интересно. Я задавал себе тот же самый вопрос в последнее время. Другим методом было бы создать элемент DOM для каждого элемента и дождаться, пока вам не нужно его отобразить, прежде чем вводить его в тело документа. Например,
var img1 = document.createElement('img');
var img2 = document.createElement('img');
img1.setAttribute('src','imageName1.gif');
img2.setAttribute('src','imageName2.gif');
... а потом, когда вы знаете, что изображения готовы к вставке...
document.getElementById('imagePlaceholder1').appendChild(img1);
document.getElementById('imagePlaceholder2').appendChild(img2);
Это приводит к тому, что файл "предварительно загружен" в современных браузерах, которые я тестировал, и он может быть более совместим с вашими собственными стилями кодирования, но я все еще беспокоюсь о том, что некоторые браузеры могут не загружать изображение на время создания элемента, но подождите, пока оно не добавится в тело документа. Поэтому я решил использовать точное решение, о котором вы говорили. По крайней мере до следующего обновления ECMAScript нет ничего плохого в "старом коде" (по крайней мере, старый код, например, новый Image()). Он работает, и он должен был работать таким образом. Я не думаю, что это особенно вредно.
[Изменить] Второй блок кода должен быть выполнен, когда вы уверены, что изображения загружены и/или когда пользователь делает то, что вы ожидаете от него или нее, что вызывает его появление.