$(function() {
// ======================= Плагин imagesLoaded ===============================
// https://github.com/desandro/imagesloaded
// $('#my-container').imagesLoaded(myFunction)
// выполняет возвратный вызов, когда все изображения загружены.
// Нужно потому, что .load() не работает на кэшированных изображениях.
// Возвратная функция получает коллекцию изображений как аргумент.
$.fn.imagesLoaded = function( callback ) {
var $images = this.find('img'),
len = $images.length,
_this = this,
blank = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
function triggerCallback() {
callback.call( _this, $images );
}
function imgLoaded() {
if ( --len <= 0 && this.src !== blank ){
setTimeout( triggerCallback );
$images.unbind( 'load error', imgLoaded );
}
}
if ( !len ) {
triggerCallback();
}
$images.bind( 'load error', imgLoaded ).each( function() {
// Кэшированные изображения иногда не запускают загрузку, поэтому мы сбрасываем источник.
if (this.complete || this.complete === undefined){
var src = this.src;
// Хак для webkit ( http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f)
// Обход предупреждения webkit
this.src = blank;
this.src = src;
}
});
return this;
};
// Контейнер галереи
var $rgGallery = $('#rg-gallery'),
// Контейнер карусели
$esCarousel = $rgGallery.find('div.es-carousel-wrapper'),
// Пункт карусели
$items = $esCarousel.find('ul > li'),
// Общее количество пунктов
itemsCount = $items.length;
Gallery = (function() {
// Индекс текущего пункта
var current = 0,
// Режим : карусель || во весь экран
mode = 'carousel',
// Проверка, если одно изображение загружено
anim = false,
init = function() {
// (Не обязательно) предварительная загрузка изображений здесьы...
$items.add('').imagesLoaded( function() {
// Добавляем опции
_addViewModes();
// Добавляем обертку большого изображения
_addImageWrapper();
// Выводим первое изображение
_showImage( $items.eq( current ) );
});
// Инициализуем карусель
_initCarousel();
},
_initCarousel = function() {
// Используем плагин elastislide:
$esCarousel.show().elastislide({
imageW : 65,
onClick : function( $item ) {
if( anim ) return false;
anim = true;
// По нажатию клавиши мыши выводим изображение
_showImage($item);
// Меняем текущее
current = $item.index();
}
});
// Устанавливаем текушее для elastislide
$esCarousel.elastislide( 'setCurrent', current );
},
_addViewModes = function() {
// Кнопки вверху справа: скрыть / показать карусель
var $viewfull = $(''),
$viewthumbs = $('');
$rgGallery.prepend( $('