Created
December 2, 2013 08:48
-
-
Save a-ignatov-parc/7746761 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Метод реализующий предзагрузку изображений. | |
| // Какие параметры могут обрабатываться в `options` | |
| // | |
| // * `images` - (_DOM/jQuery/falsy_) Ссылка на DOM элемент картинки (`<img/>`) или на `jQuery` | |
| // объект с картинками для которых нужно загрузить изображения. | |
| // Если будет передан null/false/undefined, то изображение будет загружатся не привязываясь к | |
| // какому либо тегу, после чего его можно будет вставить по событию. | |
| // | |
| // * `url` - (_string_) Ссылка на загружаемое изображение. Если этот параметр не передан, то | |
| // должен быть обязательно передан метод `params.getUrl`, который в свою очередь должен возвращать | |
| // ссылку на изобажение иначе загрузка изображения будет отменена. | |
| // | |
| // Список параметров которые могут быт ьперезаны в аргументе `params`: | |
| // | |
| // * `params.getUrl` - (_fn_) Метод, который должен возвращать ссылку на загружаемое изображение для | |
| // текущей картинки. | |
| // Используется если необходимо сделать загрузку множества файлов. | |
| // В качестве аргументов передается ссылка на `jQuery` объект обрабатываемого `<img/>`. | |
| // | |
| // * `params.onStart` - (_fn_) Метод, который вызывается перед началом загрузку изображения. | |
| // Позволяет выполнять внутри анимация из-за чего после выполнения всех действий необходимо | |
| // вызвать функцию `callback`, которая передается в параметрах иначе изображение не будет | |
| // загружатся. | |
| // В качестве аргументов передается ссылка на `jQuery` объект обрабатываемого `<img/>` и | |
| // функция `callback`, которая продолжает операцию по загрузке изображения. | |
| // | |
| // * `params.onLoad` - (_fn_) Метод который вызывается по завершению загрузки изображения. | |
| // В качестве аргументов передается ссылка на `jQuery` объект обрабатываемого `<img/>`. | |
| // | |
| // * `params.onError` - (_fn_) Метод который вызывается если загрузка изображения не удалась. | |
| // В качестве аргументов передается ссылка на `jQuery` объект обрабатываемого `<img/>`. | |
| // | |
| // * `params.forceLoad` - (_bool_) Параметр который указывает на то загружать новое изображение | |
| // если у `DOM` элемента уже проставлен атрибут `src`. | |
| preloadImages: function(images, url, params) { | |
| images = $(images || document.createElement('img')); | |
| params || (params = {}); | |
| if (!images.length || (!url && !params.getUrl)) { | |
| return; | |
| } | |
| var self = this, | |
| isPhantom = this.aliases.isPhantomJS, | |
| handler = function() { | |
| var img = $(this).off('.preloader'); | |
| if (typeof(params.onLoad) === 'function') { | |
| params.onLoad(img); | |
| } | |
| }, | |
| load = function(target, url, handler) { | |
| // Если у изображения уже есть проставленный урл и не передан парамтр для форсированный | |
| // загрузки, то обрываем загрузку | |
| if (target.attr('src') && !params.forceLoad) { | |
| return; | |
| } | |
| // Выставляем изображению урл для загрузки изображения | |
| target.attr('src', url); | |
| // Если изображение загруженно, то сразу вызываем обработчик загрузки. | |
| // Если нет, то навешиваем событие на загрузку изображения. | |
| if (target[0].complete || isPhantom) { | |
| handler.call(target[0], {}); | |
| } else { | |
| target | |
| .on('load.preloader', handler) | |
| .on('error.preloader', function() { | |
| var img = $(this).off('.preloader'); | |
| if (typeof(params.onError) === 'function') { | |
| params.onError(img); | |
| } | |
| }); | |
| } | |
| }, | |
| getImg = function(target, url, handler) { | |
| if (typeof(params.onStart) === 'function') { | |
| params.onStart(target, self.bind(function() { | |
| load(this.t, this.u, this.h); | |
| }, { | |
| u: url, | |
| t: target, | |
| h: handler | |
| })); | |
| } else { | |
| load(target, url, handler); | |
| } | |
| }; | |
| if (typeof(url) === 'object') { | |
| params = url; | |
| url = null; | |
| } | |
| if (typeof(url) === 'string') { | |
| getImg(images, url, handler); | |
| } else { | |
| if (typeof(params.getUrl) === 'function') { | |
| for (var i = 0, length = images.length, image; i < length; i++) { | |
| image = images.eq(i); | |
| getImg(image, params.getUrl(image), handler); | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment