Открыть меню    

Предварительная загрузка изображений на jQuery

Предварительная загрузка изображений очень полезна: вместо того, чтобы загружать изображения во время какого-либо действия (например, картинка подгружается лишь при наведении мышки на ссылку) пользователя, мы можем предварительно загрузить изображения в "фон", что подготовит изображения для дальнейшего использованию.
Плюс предварительной загрузки в том, что пользователь не увидит задержку при показе изображений, например, (время потраченное на загрузку изображений) при наведении мышки на разные ссылки. Сделать это на jQuery довольно просто. Как? Смотрите ниже небольшой фрагмент кода:

jQuery

(function($) {
  var cache = [];
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery)

Вызов функции:

jQuery

jQuery.preLoadImages("image1.gif", "/path/to/image2.png");

Давайте разобьем наш скрипт на небольшие фрагменты:

(function($){…})(jQuery) создает анонимную функцию, и тут же вызывает ее, передавая в качестве параметра объект jQuery, таким образом внутри анонимной функции мы можем использовать алиас $ не боясь за конфликты с другими библиотеками

Чтобы исключить появление ошибок при взаимодействии с другими библиотеками (например, если $ уже занят другой библиотекой) необходимо заключить нашу вспомогательную функцию в следующую конструкцию (анонимную функцию):

jQuery

(function($) {

...

})(jQuery)

Внутри анонимной функции мы имеем переменную, в которой будем складировать загружаемые изображения. Причина присоединения к jQuery - избежать загрязненности глобальной области видимости. Если Вы не используете jQuery на странице или используете какой-либо глобальный объект, вероятно, лучше присоединить метод к такому объекту.

jQuery

var cache = [];

jQuery

$.preLoadImages = function() { .............  }

Подсчитываем количество аргументов (изображений) переданных в функцию. Вызываем один раз и сохраняем в переменной.

jQuery

var args_len = arguments.length;

Проходим в цикле по каждому аргументу. Нам не важен порядок, в котором изображения предварительно загружаются на страницу, поэтому подгружаем их начиная с последнего. Цикл с конца быстрее, чем цикл с начала.

jQuery

for (var i = args_len; i--;) {
  ...
}

Создаем изображение как DOM-элемент в браузере. Как только изображение создано, устанавливаем путь и присоединяем к массиву cache.

jQuery

var cacheImage = document.createElement('img');
cacheImage.src = arguments[i];
cache.push(cacheImage);

Комментарии к статье