2 175 Скрипты / Slider

Минималистичная слайдшоу галерея


Простое и симпатичное слайдшоу-галерея. Имеется блок с вашими картинками и функции для их просмотра: кнопки Пауза, Перемещение влево и вправо; выдвигающаяся панель с миниатюрами изображений.

HTML

Основная структура HTML состоит из главной оболочки слайдшоу, содержащей контейнер для полного просмотра изображения (msg_wrapper) и другой для миниатюр (msg_thumbs): В атрибуте ALT миниатюр будет содержаться путь до оригинального изображения. Названия классов делаются с префиксом "msg", таким образом стиль слайдшоу не повлияет на стиль вашего сайта.

CSS

Сначала определим стиль для главной оболочки
.msg_slideshow{
 width:400px;
 height:400px;
 padding:10px;
 position:relative;
 overflow:hidden;
 background:#101010 url(../icons/loading.gif) no-repeat center center;
 -moz-border-radius:10px;
 -webkit-border-radius:10px;
 border-radius:10px;
}
Устанавливая фоном gif изображение прелоадера мы добиваемся такого эффекта: при перелистывании, пока мы ждем загрузки следующего изображения, мы увидим фоновое изображение, которым и является наш прелоадер, а загрузившаяся картинка, просто его перекроет собой и мы его не увидим.
Удалим border и outlines с элементов ссылок:
.msg_slideshow a{
 outline:none;
}
.msg_slideshow a img{
 border:none;
}
Для центрирования полного изображения в контейнере по вертикали и по горизонтали мы должны добавить еще одну оболочку, которая будет отображаться в ячейке таблицы. И добавляем vertical-align:middle для центрирования.
.msg_wrapper{
 width:400px;
 height:400px;
 position:relative;
 margin:0;
 padding:0;
 display:table-cell;
 text-align:center;
 vertical-align:middle;
 overflow:hidden;
}
.msg_wrapper img{
 display: inline-block!important;
 vertical-align:middle;
 -moz-box-shadow:0px 0px 10px #000;
 -webkit-box-shadow:0px 0px 10px #000;
 box-shadow:0px 0px 10px #000;
}
Элемент управления имеет следующий стиль оформления:
.msg_controls{
 position:absolute;
 bottom:15px;
 right:-110px;
 width:104px;
 height:26px;
 z-index: 20;
 -moz-border-radius:5px;
 -webkit-border-radius:5px;
 border-radius:5px;
 background-color:#000;
 opacity:0.8;
}
Общий стиль для всех элементов управления:
.msg_controls a{
 float:left;
 background-color:#000;
 width:20px;
 height:20px;
 margin:3px 3px;
 opacity:0.5;
 background-repeat:no-repeat;
 background-position: center center;
}
.msg_controls a:hover{
 opacity:1.0;
}
Стиль для каждой иконки:
.msg_controls a.msg_grid{
 background-image:url(../icons/grid.png);
}
.msg_controls a.msg_prev{
 background-image:url(../icons/prev.png);
}
.msg_controls a.msg_next{
 background-image:url(../icons/next.png);
}
.msg_controls a.msg_pause{
 background-image:url(../icons/pause.png);
}
.msg_controls a.msg_play{
 background-image:url(../icons/play.png);
}
Контейнер с миниатюрами будет появляться сверху, поэтому мы его позиционируем абсолютно и первоначально скрываем, установив значение top на -230px:
.msg_thumbs{
 background:#000;
 position:absolute;
 width:250px;
 height:166px;
 top:-230px;
 left:50%;
 padding:30px;
 margin:0 0 0 -155px;
 -moz-border-radius:0px 0px 10px 10px;
 -webkit-border-bottom-left-radius:10px;
 -webkit-border-bottom-right-radius:10px;
 border-bottom-left-radius:10px;
 border-bottom-right-radius:10px;
 -moz-box-shadow:1px 1px 5px #000;
 -webkit-box-shadow:1px 1px 5px #000;
 box-shadow:1px 1px 5px #000;
 opacity:0.9;
 overflow:hidden;
}
C параметрами left 50% и margin со значением минус половины ширины, мы можем отцентрировать элемент по горизонтали.
Оболочка содержащая миниатюры картинок имеет следующий стиль:
.msg_thumb_wrapper{
 position:absolute;
 width:250px;
 height:166px;
 top:30px;
 left:30px;
 z-index:30;
}
Стиль миниатюр:
.msg_thumb_wrapper a{
 display:block;
 width:75px;
 height:75px;
 float:left;
 margin:4px;
 opacity:0.8;
}
При наведении на миниатюру, прозрачность будет 1.0, то есть оживим немного нашу галерею придав ей немножко анимации.
Стиль для навигации:Небольшой элемент для опускания сетки просмотра:
.msg_thumbs a.msg_thumb_close{
 position:absolute;
 bottom:0px;
 width:50px;
 left:50%;
 margin:0 0 0 -25px;
 background:#202020 url(../icons/up.png) no-repeat center center;
 height:16px;
 opacity:0.7;
 -moz-border-radius:5px 5px 0 0;
 -webkit-border-top-left-radius:5px;
 -webkit-border-top-right-radius:5px;
 border-top-left-radius:5px;
 border-top-right-radius:5px;
}
Мы добавили небольшие закругления углов. И при наведении сделаем их прозрачными:
.msg_thumbs a.msg_thumb_close:hover{
 opacity:1.0;
}
И, наконец, загрузка элемента в сетку, который мы отцентрировали по горизонтали и вертикали:


.msg_loading{
 position:absolute;
 background:transparent url(../icons/loading.gif) no-repeat center center;
 top:50%;
 left:50%;
 width:50px;
 height:50px;
 margin:-25px 0 0 -25px;
 z-index:25;
 display:none;
}
Вот и весь стиль. Теперь ява.

JS

Сначала определим некоторые переменные:
interval: время между показом изображений
playtime: продолжительность для функции setInterval
current: номер для управления текущим изображением
current_thumb: индекс текущей оболочки миниатюры
nmb_thumb_wrappers: общее число оболочек миниатюр
nmb_images_wrapper: количество изображений внутри каждой оболочки


var interval   = 4000;
var playtime;
var current    = 0;
var current_thumb   = 0;
var nmb_thumb_wrappers = $('#msg_thumbs .msg_thumb_wrapper').length;
var nmb_images_wrapper  = 6;
Начало слайдшоу:


play();
При наведении на основной контейнер, кнопки управления выезжают с правой стороны:
slideshowMouseEvent();
function slideshowMouseEvent(){
 $('#msg_slideshow').unbind('mouseenter')
        .bind('mouseenter',showControls)
        .andSelf()
        .unbind('mouseleave')
        .bind('mouseleave',hideControls);
 }
При клике на иконку в панели управления - режим просмотра миниатюр, пауза:
$('#msg_grid').bind('click',function(e){
 hideControls();
 $('#msg_slideshow').unbind('mouseenter').unbind('mouseleave');
 pause();
 $('#msg_thumbs').stop().animate({'top':'0px'},500);
 e.preventDefault();
});
При нажатии на иконку скрытия режима просмотра миниатюр, вновь появляется навигация:
$('#msg_thumb_close').bind('click',function(e){
 showControls();
 slideshowMouseEvent();
 $('#msg_thumbs').stop().animate({'top':'-230px'},500);
 e.preventDefault();
});
Далее, мы определяем, что случиться, когда мы кликнем на паузу или плей. По мимо изменения класса, также будем вызывать и функции play и pause:
$('#msg_pause_play').bind('click',function(e){
 var $this = $(this);
 if($this.hasClass('msg_play'))
  play();
 else
  pause();
 e.preventDefault();
});
При нажатии на кнопки next или previous, произойдет остановка нашего слайдшоу и переход на соответствующее изображение:
$('#msg_next').bind('click',function(e){
 pause();
 next();
 e.preventDefault();
});
$('#msg_prev').bind('click',function(e){
 pause();
 prev();
 e.preventDefault();
});
Далее, определим функции для отображения и скрытия элементов управления. Не забывайте, что мы устанавливаем первоначально отрицательное значение в CSS.
function showControls(){
 $('#msg_controls').stop().animate({'right':'15px'},500);
}
function hideControls(){
 $('#msg_controls').stop().animate({'right':'-110px'},500);
}
Функция play() для запуска слайдшоу:
function play(){
 next();
 $('#msg_pause_play').addClass('msg_pause').removeClass('msg_play');
 playtime = setInterval(next,interval)
}
Функция pause() для слайдшоу. Изменяем снова класс и очищаем время задержки:
function pause(){
 $('#msg_pause_play').addClass('msg_play').removeClass('msg_pause');
 clearTimeout(playtime);
}
Функции предыдущего и следующего изображения:
function next(){
 ++current;
 showImage('r');
}
function prev(){
 --current;
 showImage('l');
}
Следующая функция для показа изображений. Также вызываем и функцию alternateThumbs(), которая всегда будет менять сетку просмотра в зависимости от того, какое изображение мы просматриваем:Функция alternateThumbs() :Далее, мы определяем, что будет, когда мы переходим по превью:При нажатии на миниатюру будет загружаться соответствующее изображение:
$('#msg_thumbs .msg_thumb_wrapper > a').bind('click',function(e){
 var $this   = $(this);
 $('#msg_thumb_close').trigger('click');
 var idx   = $this.index();
 var p_idx  = $this.parent().index();
 current   = parseInt(p_idx*nmb_images_wrapper + idx + 1);
 showImage();
 e.preventDefault();
}).bind('mouseenter',function(){
 var $this   = $(this);
 $this.stop().animate({'opacity':1});
}).bind('mouseleave',function(){
 var $this   = $(this);
 $this.stop().animate({'opacity':0.5});
});
И, наконец, функция размера, что соответствует изображению внутри нашего контейнера. Определим её размеры, как 400х400 пикселей:Вот и всё, пользуйтесь.
Скачать 489Загрузок 577,31 Kb
Демо

Комментарии

  • Facebook
  • Вконтакте

Похожие статьи