2 972 Скрипты / Slider

Эффект затвора камеры для слайдшоу

Теперь своё портфолио из фотографий можно красиво оформить с помощью слайдшоу, использующего jQuery и элемент HTML5 - canvas, в котором смена фотографии происходит с эффектом затвора камеры.
Идея
Элемент canvas представляет из себя специальную область, в которой можно создавать растровые изображения с помощью jаvascript и проводить всевозможные манипуляции с ними. Однако, существуют и ограничения на его использование. Создание сложной анимации в реальном времени требует перерисовки canvas-ом каждого кадра, и как следствие, большой вычислительной мощности, которую в данный момент современные браузеры просто не могут обеспечить. Отсюда, плавная анимация практически невозможна. Но существует способ позволяющий обойти этот недостаток. Если вы уже посмотрели Демо, то заметили, что оно довольно плавно работает. Это происходит потому, что кадры формируются заранее и каждый из них построен, как отдельный canvas элемент.

Эффект затвора камеры для слайдшоу

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

HTML

Стили для страницы и плагина подключены в head, так же как и файлы скриптов.
DIV #container содержит неупорядоченный список из четырех фотографий, которые будут отображаться в виде слайдшоу. Если браузер пользователя не поддерживает элемент canvas, то изображения будут циклично меняться, но без эффекта затвора.
Когда вызывается плагин затвора, то он формирует следующую HTML разметку.
В нашем примере, для элемента DIV #container.

<div class="shutterAnimationHolder" style="width: 640px; height: 400px;">
    <div class="film" style="height: 15000px; width: 1000px; margin-left: -500px; top: -300px;">
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
        <canvas width="1000" height="1000"></canvas>
    </div>
</div>

Каждый canvas элемент содержит один кадр из анимации затвора камеры. Высота DIV с классом film должна быть установлена достаточно большой, для отображения canvas элементов один над другим.
DIV с классом shutterAnimationHolder иммет ту же высоту, что и в DIV с  классом container, в котором он установлен и отображается над неупорядоченным списком с фотографиями.

CSS

jquery.shutter.css

.shutterAnimationHolder .film canvas{
    display: block;
    margin: 0 auto;
}

.shutterAnimationHolder .film{
    position:absolute;
    left:50%;
    top:0;
}

.shutterAnimationHolder{
    position:absolute;
    overflow:hidden;
    top:0;
    left:0;
    z-index:1000;
}

Эти три класса с префиксом .shutterAnimationHolder влияют только на разметку сформированную плагином. Этот код, в целях уменьшения запросов HTTP, можно поместить в ваш основной CSS файл стилей.

JS

Создадим jQuery плагин tzShutter, который прост в использовании и требует минимальных изменений в сайте, для его использования.
Одним из важных пунктов в разработке плагина, является обеспечение надлежащей поддержки для пользователей, чьи браузеры не понимают теги canvas (в основном все версии IE, за исключением 9-ой). Сделать это просто, достаточно пропустить генерацию canvas.
Также нужно реализовать способ вызова открытия и закрытия анимации. Добиться этого можно с помощью двух событий содержащих элементы shutterOpen и shutterClose используя jQuery метод trigger().
jquery.shutter.js


Теперь посмотрим как используется плагин:
script.js


Когда плагин заканчивает генерацию canvas элементов, происходит вызов функции loadCompleteCallback. Мы используем её для вызова анимации затвора каждые 4 секунды, сопровождающееся сменой фотографий.

Скачать 553Загрузок 288,44 Kb
Демо

Комментарии

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

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