Анимированная CSS3 галерея с разнообразными эффектами

В этом уроке мы создадим анимированную галерею, в которой будем использовать разные эффекты для смены изображений. Все эти эффекты реализуются с помощью CSS3. Так же мы сделаем автоматическую смену изображений, так что можно будет использовать галерею в качестве слайд шоу.




Анимированная CSS3 галерея с разнообразными эффектами

HTML

Начнем, как всегда, с HTML разметки. Создадим обычный HTML5 документ, в котором подключим необходимые файлы:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
 
    <title>Animated CSS3 Photo Stack | Tutorialzine Demo</title>
 
    <!-- CSS Includes -->
    <link href="assets/css/style.css" rel="stylesheet" />
    <link href="assets/css/animate.css" rel="stylesheet" />
 
</head>
<body>
 
    <ul id="photos">
        <li><a href="http://www.flickr.com/photos/brockwhittaker/8500935165/"
        style="background-image:url(...)">Landscape 5</a></li>
        <!-- еще фото -->
    </ul>
 
    <a href="#"></a>
    <a href="#"></a>
 
    <!-- Libraries -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="assets/js/script.js"></script>
 
</body>
</html>

 

Элемент #photos содержит все фото. Для каждой картинки определен тег <li>, в котором содержится ссылка на фотографию. Фотографии служат в качестве фона (свойство background-image) для каждой ссылки. Мы будем использовать свойство background-size для того, чтобы картинка заняло все пространство ссылки.

В HTML документе мы подключаем animate.css — главный CSS файл библиотеки, содержащей анимацию для смены картинок в галереи. Перед закрытием тега <body> подключаем jQuery и script.js, о котором поговорим ниже.

JavaScript

Для применения эффектов библиотеки animate library необходимо назначить CSS класс с названием анимации элементу, который хотим анимировать. После анимации нам надо будет переместить картинку в конец списка и показать следующее изображение. Рассмотрим по пунктам, что нам необходимо сделать:

  • Отслеживать нажатия на стрелку;
  • При нажатии на стрелку выбрать случайную анимацию (назначив соответствующий CSS класс);
  • Спустя секунду, после завершения анимации, передвинем фото в верх списка с помощью jQuery функции prependTo и удалим назначенный ранее CSS класс.
  • Со стрелкой для предыдущего изображения проделаем примерно то же самое с небольшой разницей: перед назначением CSS класса переместим из конца списка в начало.

В результате у нас получится стек из фотографий.




Также мы сделаем автоматическую смену изображений, что позволит использовать данный пример в качестве сладера.

$(function() {
 
    var exits = ['fadeOut', 'fadeOutDown', 'fadeOutUpBig', 'bounceOut', 'bounceOutDown',
        'hinge', 'bounceOutUp', 'bounceOutLeft', 'rotateOut', 'rotateOutUpLeft',
        'lightSpeedOut', 'rollOut'];
 
    var entrances = ['fadeIn', 'fadeInDown', 'fadeInRight', 'bounceIn', 'bounceInRight',
            'rotateIn', 'rotateInDownLeft', 'lightSpeedIn', 'rollIn', 'bounceInDown'];
 
    var photos = $('#photos'),
        ignoreClicks = false;
 
    $('.arrow').click(function(e, simulated){
        if(ignoreClicks){
 
            // если нажатия на стрелки отслеживать не надо
 
            e.stopImmediatePropagation();
            return false;
        }
 
        ignoreClicks = true;
 
        if(!simulated){
            // если произощло нажатие на кнопку,
            // останавливаем автоматическую смену картинок
            clearInterval(slideshow);
        }
    });
 
    // нажатия на стрелку следующего изображения
    $('.arrow.next').click(function(e){
 
        e.preventDefault();
 
        var elem = $('#photos li:last');
 
        // назначаем случайную анимацию
        elem.addClass('animated')
            .addClass( exits[Math.floor(exits.length*Math.random())] );
 
        setTimeout(function(){
 
            // убираем класс анимации
            elem.attr('class','').prependTo(photos);
 
            // анимация закончилась
            // позволяем нажатия на кнопки:
            ignoreClicks = false;
 
        },1000);
    });
 
    // нажатия на стрелку предыдущего фото
    $('.arrow.previous').click(function(e){
 
        e.preventDefault();
 
        var elem = $('#photos li:first');
 
        // передвигаем картинку вверх
        // и назначаем анимацию
 
        elem.appendTo(photos)
            .addClass('animated')
            .addClass( entrances[Math.floor(entrances.length*Math.random())] );
 
        setTimeout(function(){
 
            // убираем класс
            elem.attr('class','');
 
            ignoreClicks = false;
 
        },1000);
    });
 
    // автоматическая смена картинок
    var slideshow = setInterval(function(){
 
        // меняем каждые 1.5 секунды
        $('.arrow.next').trigger('click',[true]);
 
    }, 1500);
 
});

 

В примере использованы не все возможные анимации, весь список можно найти на github.

Осталось только написать CSS для нашего примера.

CSS

Рассмотрим толь ко ту часть CSS, которая относится непосредственно к галерее:

#photos{
    margin:0 auto;
    padding-top:120px;
    width:450px;
    position:relative;
}
 
#photos li{
    position:absolute;
    width:450px;
    height:450px;
    overflow:hidden;
    background-color:#fff;
    box-shadow: 1px 1px 1px #ccc;
    z-index:10;
 
    -webkit-animation-duration: 1s;
    -moz-animation-duration: 1s;
    animation-duration: 1s;
}
 
#photos li a{
    position:absolute;
    top:6px;
    left:6px;
    right:6px;
    bottom:6px;
    background-size: cover;
    text-indent:-9999px;
    overflow:hidden;
}

 

Для изменения периода анимации, измените свойство animation-duration. В нашем примере установлена 1 секунда.

Готово! Вы можете использовать этот пример совместно с PHP и автоматически формировать список фото

 

Оригинал

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.