Спикеры ted. Выступления TED, которые должен посмотреть каждый учитель. Тони Роббинс о том, почему мы делаем то, что мы делаем

/* Тут начинается наша карусель. Блок.carousel-wrapper спозиционирован относительно, абертки.carousel-item абсолютно. . */ .carousel-wrapper{ position:relative; /* Абсолютно спозиционированные блоки получают высоту и ширину от родителя. Мы сделали их прозрачными по умолчанию, и потом они будут плавно появляться по нажатию на ссылки.arrow-prevи.arrow-next. */ .carousel-item{ position:absolute; top:0; bottom:0; left:0; right:0; padding:25px50px; opacity:0; transition:all0.5sease-in-out; /* Заметили padding слева и справа по 50px? Таким способом мы можем позиционировать наши ссылки! Каждая будет по 50px шириной. Кроме того, я использую пустые ссылки с фоновым рисунком таким образом, что ссылки выглядят как стрелки. Проверьте, поменяли ли вы URL ссылок с оригинальным URL, чтобы ваши ссылки не были просто прозрачными прямоугольниками. */ .arrow{ position:absolute; top:0; display:block; width:50px; height:100%; -webkit-tap-highlight-color:rgba(0,0,0,0); background:url("/carousel-arrow-dark.png")50%50%/20pxno-repeat; /* Давайте вернем нашу стрелку налево. */ &.arrow-prev{ left:0; } /* А вторую направо. Поскольку я использую одно и то же изображение для стрелки, я поворачиваю его на 180 градусов. */ &.arrow-next{ right:0; -webkit-transform:rotate(180deg); transform:rotate(180deg); } } /* Мне очень нравится, как слайды карусели смотрятся на темном фоне, и если блок.carousel-itemимеет класс "light", мы изменим его текст на белый и используем белые стрелки вместо серых. Проверьте еще раз, правильно ли указан путь к изображению стрелки */ &.light{ color:white; .arrow{ background:url("/carousel-arrow-light.png")50%50%/20pxno-repeat; } } /* Напишем медиа-запрос для изменения размера стрелок на устройствах с меньшим размером экрана.*/ @media(max-width:480px){ .arrow,&.light.arrow{ background-size:10px; background-position:10px50%; } } } /* Установим целям для ссылок значение display: none; Таким образом, мы избавляемся от постоянного перепрыгивания браузера в самый верх карусели при каждом нажатии на стрелки. Это свойство действует для любых элементов, чей идентификатор начинается на "target-item". */ { display:none; } /* Выше мы сделали все наши слайды карусели прозрачными, а это значит, что во время загрузки карусели мы будем получать вместо нее большое пустое поле. Изменим значение прозрачности для первого слайда на 1 для отображения. Так же устанавливаем z-index значение 2, позиционируя его выше остальных слайдов. */ .item-1{ z-index:2; opacity:1; } /* Но нам не нужно, чтобы первый слайд всегда имел значение прозрачностиopacity: 1; в противном случае нам придется пробираться через этот слайд, во время ротации остальных. */ *:target~.item-1{ opacity:0; } /* ..но если #target-item-1 в фокусе, и мы хотим показать первый слайд, тогда выбираем его с помощью значка ~ и устанавливаем прозрачность опять в 1:-) */ #target-item-1:target~.item-1{ opacity:1; } /* Если другие target-item-# в фокусе, выбираем их используя ~ селектор, плавно показываем, и размещаем их сверху с помощьюz-index: 3. Тут вы можете добавить дополнительные spanс идентификатором target-item, если их у вас будет больше трех. Может сразу и добавить 10 штук.. */ #target-item-2:target~.item-2,#target-item-3:target~.item-3{ z-index:3; opacity:1; } }

11.01.15 308976

В настоящее время слайдер – карусель – функционал, который просто необходимо иметь на сайте для бизнеса, сайте — портфолио или любом другом ресурсе. Наряду с полноэкранными слайдерами изображения, горизонтальные слайдеры – карусели хорошо вписываются в любой веб-дизайн.

Иногда слайдер должен занимать одну треть страницы сайта. Здесь слайдер — карусель используется с эффектами переходов и с адаптивными макетами. Сайты электронной коммерции используют слайдер – карусель для демонстрации множества фото в отдельных публикациях или страницах. Код слайдера можно свободно использовать и изменять его в соответствии с потребностями.

Используя JQuery совместно с HTML5 и CSS3 , можно сделать ваши страницы более интересными, снабдив их уникальными эффектами, и обратить внимание посетителей на конкретную область сайта.

Slick – плагин современного слайдера — карусели

Slick – свободно распространяемый jquery – плагин, разработчики которого утверждают, что их решение удовлетворит все ваши требования к слайдеру. Адаптивный слайдер – карусель может работать в режиме «плитки » для мобильных устройств, и, в режиме «перетаскивания » для десктопной версии.

Содержит эффект перехода «затухание », интересную возможность «режим в центре », ленивую загрузку изображений с автопрокруткой. Обновленный функционал включает в себя добавление слайдов и фильтр слайдов. Все для того, чтобы вы настроили плагин в соответствии с вашими требованиями.

Демо-режим | Скачать

Owl Carousel 2.0 – jQuery — плагин с возможностью использования на сенсорных устройствах

В арсенале этого плагина – большой набор функций, подходящий как для новичков, так и для опытных разработчиков. Это обновленная версия слайдера — карусели. Его предшественник именовался точно также.

Слайдер имеет в своем составе некоторые встроенные плагины для улучшения общего функционала. Анимация, проигрывание видео, автозапуск слайдера, ленивая загрузка, автоматическая корректировка высоты – основные возможности Owl Carousel 2.0 .

Поддержка возможности drag and drop включена для более удобного использования плагина на мобильных устройствах.
Плагин отлично подойдет для отображения больших изображений даже на маленьких экранах мобильных устройств.

Примеры | Скачать

jQuery плагин Silver Track

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

Примеры | Скачать

AnoSlide – Ультра компактный адаптивный jQuery слайдер

Ультра компактный jQuery слайдер – карусель, функционал которого намного больше, чем у обычного слайдера. Он включают в себя предварительный просмотр одного изображения, отображение нескольких изображений в виде карусели и слайдера на основе заголовков.

Примеры | Скачать

Owl Carousel – Jquery слайдер — карусель

Owl carousel – слайдер с поддержкой сенсорных экранов и технологии drag and drop , легко встраиваемый в HTML — код. Плагин является одним из лучших слайдеров, которые позволяют создавать красивые карусели без какой — либо специально подготовленной разметки.

Примеры | Скачать

3D галерея — карусель

Использует 3D – переходы, основанные на CSS – стилях и немного Javascript кода.

Примеры | Скачать

3D карусель с использованием TweenMax.js и jQuery

Великолепная 3D карусель. Похоже, что это еще бета – версия, потому как я обнаружил пару проблем с ней буквально сейчас. Если вы заинтересованы в тестировании и создании ваших собственных слайдеров – эта карусель будет большим подспорьем.

Примеры | Скачать

Карусель с использованием bootstrap

Адаптивный слайдер – карусель с использованием технологии bootstrap как раз для вашего нового веб-сайта.

Примеры | Скачать

Основанный на Bootstrap – фреймворке слайдер — карусель Moving Box

Наиболее востребованный на портфолио и бизнес сайтах. Подобный тип слайдера — карусели часто встречается на сайтах любого типа.

Примеры | Скачать

Tiny Circleslider

Это слайдер крошечного размера готов работать на устройствах с любым разрешением экрана. Слайдер может работать как в круговом, так и карусельном режиме. Tiny circle представлен как альтернатива другим слайдерам подобного типа. Имеется встроенная поддержка операционных систем IOS и Android .

В круговом режиме слайдер выглядит довольно интересно. Отлично реализована поддержка метода drag and drop и система автоматической прокрутки слайдов.

Примеры | Скачать

Слайдер контента Thumbelina

Мощный, адаптивный, слайдер карусельного типа отлично подойдет к современному сайту. Корректно работает на любых устройствах. Имеет горизонтальный и вертикальный режимы. Его размер минимизирован всего до 1 КБ. Ультра компактный плагин ко всему прочему имеет отличные плавные переходы.

Примеры | Скачать

Wow – слайдер — карусель

Содержит более 50 эффектов, что может помочь вам в создании оригинального слайдера для вашего сайта.

Примеры | Скачать

Адаптивный jQuery слайдер контента bxSlider

Измените размер окна браузера, чтобы увидеть, как адаптируется слайдер. Bxslider поставляется более чем с 50 вариантами настроек и демонстрирует свои функции с различными эффектами переходов.

Примеры | Скачать

jCarousel

jCarousel — jQuery плагин, который поможет организовать просмотр ваших изображений. Вы сможете с легкостью создавать пользовательские карусели изображений из основы который показан в примере. Слайдер адаптивный и оптимизирован для работы на мобильных платформах.

Примеры | Скачать

Scrollbox — jQuery плагин

Scrollbox компактный плагин для создания слайдера – карусели или текстовой бегущей строки. Основные функции включают в себя эффект вертикальной и горизонтальной прокрутки с паузой при наведении курсора мыши.

Примеры | Скачать

dbpasCarousel

Простой слайдер – карусель. Если вам нужен быстрый плагин – этот подойдет на 100%. Поставляется только с основными функциями, необходимыми для работы слайдера.

Примеры | Скачать

Flexisel: адаптивный JQuery плагин слайдера — карусели

Создатели Flexisel вдохновились плагином старой школы jCarousel , сделав его копию, ориентированную на корректную работу слайдера на мобильных и планшетных устройствах.

Адаптивный макет Flexisel , при работе на мобильных устройствах, отличается от макета, ориентированного на размер окна браузера. Flexisel отлично адаптирован к работе на экранах, как с низким, так и высоким разрешением.

Примеры | Скачать

Elastislide – адаптивный слайдер — карусель

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

Пример | Скачать

FlexSlider 2

Свободно распространяемый слайдер от Woothemes . По праву считается одним из лучших адаптивных слайдеров. Плагин содержит несколько шаблонов и будет полезен как начинающим пользователям, так и экспертам.

Пример | Скачать

Amazing Carousel

Amazing Carousel – адаптивный слайдер изображений на jQuery . Поддерживает множество систем управления сайтами, такие как WordPress , Drupal и Joomla . Также поддерживает Android и IOS и настольные варианты операционных систем без каких-либо проблем с совместимостью. Встроенные шаблоны amazing carousel позволяют использовать слайдер в вертикальном, горизонтальном и круговом режимах.

Как-то мои друзья решили сделать мне приятный сюрприз. Сам сюрприз был очень простым, для него требовалась самая обычная футболка без рисунков.

И тут они столкнулись с проблемой — все футболки в магазинах были с изображениями. Они никак не могли найти самую простую футболку, без изображений. Я думаю и вы сталкивались с подобной проблемой, когда не найти самую простую вещь.

И с каруселями та же самая история, почти все карусели уже с дизайном. А вам практически всегда нужна чистая карусель, которую потом можно оформить так как задумал дизайнер.

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

jQuery плагин чистой и мощной карусели

Фишка этого плагина в том, что он без дизайна и с ним гораздо легче работать, чем с другими красивыми плагинами.

Его можно оформлять как угодно .

И так, вот этот плагин: Owl Carousel.

Установка плагина

1. Подключаем jQuery , если он еще не подключен, например так

2. Копируем файлы плагина в папку с сайтом

  • Распаковываем
  • Копируем на сайт папку owl-carousel

3. Подключаем эти файлы к сайту:

4. Добавляем на страницу код

1 2 3 4 5 6 7 8 9 10 11 12 13 14

5. Запускаем плагин

$(document).ready(function(){ // Находим блок карусели var carousel = $("#carousel"); // Запускаем плагин карусели carousel.owlCarousel(); });

6. Оформляем

/* Основной блок */ .owl-wrapper-outer { border: 1px solid #777; border-radius: 5px; overflow: hidden; background: white; } /* 1 квадратик карусели */ .carousel-element { padding: 30px; text-align: center; font-size: 300%; border-right: 1px solid #777; }

Кнопки «Назад» и «Вперед»

В этом примере я покажу не самый быстрый, но зато самый универсальный способ.

1. Добавляем сами кнопки

Назад Вперед

2. Присоединяем кнопки к плагину карусели

После запуска плагина добавляем код

// Назад // При клике на "Назад" $("#js-prev").click(function () { // Запускаем перемотку влево carousel.trigger("owl.prev"); return false; }); // Вперед // При клике на "Вперед" $("#js-next").click(function () { // Запускаем перемотку вправо carousel.trigger("owl.next"); return false; });

Теперь при клике на «Назад» и «Вперед» будет срабатывать перемотка.

Маркеры

Это такие точки, которые показывают, где мы сейчас находимся.

Их можно включить при запуске плагина, добавив следующий параметр

// Запускаем плагин карусели carousel.owlCarousel({ // Точки под каруселью pagination: true });

/* Блок с точками */ .owl-pagination { text-align: center; /* Выравниваем точки по-середине */ } /* 1 Точка */ .owl-page { width: 10px; height: 10px; border: 1px solid #777; display: inline-block; background: white; margin: 10px; border-radius: 5px; } /* Активная точка */ .owl-page.active { background: #777; }

Чтобы показывался только 1 блок

Это довольно часто нужно, для этого добавляем следующий параметр

// Запускаем плагин карусели carousel.owlCarousel({ singleItem: true, // Показывать только 1 блок на всю ширину });

Разное количество блоков на разных устройствах

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

// Запускаем плагин карусели carousel.owlCarousel({ // Количество отображающихся блоков // в зависимости от устройства (ширины экрана) // Количество блоков на больших экранах items: 10, // 5 блоков на компьютерах (экран от 1400px до 901px) itemsDesktop: , // 3 блока на маленьких компьютерах (экран от 900px до 601px) itemsDesktopSmall: , // 2 элемента на планшетах (экран от 600 до 480 пикселей) itemsTablet: , // Настройки для телефона отключены, в этом случае будут // использованы настройки планшета itemsMobile: false });

А что за сюрприз то?

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

Я открываю, смотрю футболка. Разворачиваю. Вот блин, что за тупость. Я вижу на этой футболке 3 своих фотографии. Одеваю футболку и все начинают ржать, получилось тупо и весело.

Когда я начал изучать эту тему, мне не нужна была трехмерная карусель, но я больше интересовался техническими деталями ее реализации. Разумеется, основные используемые методы, конечно же, относятся к модулю CSS Transforms Module Level 1 , но по мере того, как будет применена группа других технологий разработки переднего плана, затрагивая различные темы в CSS, Sass и клиентском JavaScript .

Демо

Чтобы проиллюстрировать настройку 3D-преобразований CSS, я покажу вам версию компонента только для CSS. Затем я покажу вам, как улучшить его с помощью JavaScript, разработав простой скрипт компонента.

Разметка для карусели с восемью изображениями

Для разметки изображения внутри компонента обернуты внутри элемента, который обеспечивает базовый скелет:

Это будет нашим фундаментом.

Геометрическая структура карусели

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

Эти элементы должны быть расположены по кругу, очерченном карусели. Этот круг может быть аппроксимирован его ограниченным регулярным многоугольником и изображениями, расположенными по бокам:

Таким образом, количество сторон такого многоугольника совпадает с количеством изображений в карусели:
С тремя изображениями многоугольник является равносторонним треугольником;
С четырьмя изображениями это квадрат;
С пятью пятиугольниками; и так далее:

Что делать, если в карусели меньше трех изображений?

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

Этот воображаемый опорный многоугольник будет располагаться в трехмерном пространстве, перпендикулярном плоскости окна просмотра, и его центр будет оттеснен назад в экран на расстоянии, равном его апотему, расстоянии стороны многоугольника от его центра, как показано на рис. Этот сверху вниз вид карусели:

Таким образом, сторона, которая в настоящее время обращена к зрителю, будет находиться на плоскости экрана при z = 0, а переднее изображение, не подверженное перспективой ракурса, будет иметь свой обычный 2D размер. d Письмо на картинке представляет значение для CSS perspective свойства.

Построение геометрии карусели

В этом разделе я покажу вам ключевые правила CSS, которые я буду проходить шаг за шагом.

В следующих фрагментах кода некоторые переменные Sass используются, чтобы сделать компонент более настраиваемым. Я буду использовать, $n чтобы обозначить количество изображений в карусели и $item-width указать ширину изображения.

Элемент является содержащим окном для первого изображения и опорного элемента, вокруг которого другие изображения будут расположены и трансформированны.
Предположим, на данный момент, что у карусели было только одно изображение для демонстрации, я могу начать с калибровки и выравнивания:

Carousel { display: flex; flex-direction: column; align-items: center; > * { flex: 0 0 auto; } .figure { width: $item-width; transform-style: preserve-3d; img { width: 100%; &:not(:first-of-type) { display: none /* Just for now */ } } } }

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

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

Карусель можно поворачивать в трехмерном пространстве, применяя преобразование вращения к элементу. Это вращение должно быть вокруг центра многоугольника, поэтому я изменю исходное происхождение преобразования :

Carousel figure { transform-origin: 50% 50% (-$apothem); }

Это значение отрицается, потому что в CSS положительное направление оси z находится вне экрана, к зрителю. Скобки необходимы, чтобы избежать синтаксических ошибок Sass . Вычисление многоугольника apothem будет объяснено позже.

Переведя систему отсчета элемента, вся карусель может поворачиваться с вращением на (новой) оси y:

Carousel figure { transform: rotateY(/* some amount here */rad); }

Я вернусь к деталям этого поворота позже.

Перейдем к преобразованиям для других изображений. При абсолютном позиционировании изображения складываются внутри :

Carousel figure img:not(:first-of-type) { position: absolute; left: 0; top: 0; }

Эти z-index значения игнорируются, потому что это только предварительный шаг для следующих преобразований. Фактически, теперь каждое изображение можно поворачивать по оси y карусели на угол поворота, который зависит от стороны многоугольника, на которой назначено изображение. Во-первых, как это делается с элементом, изменяется исходное происхождение изображений по умолчанию, перемещая его в центр многоугольника:

Img:not(:first-of-type) { transform-origin: 50% 50% (-$apothem); }

Затем изображения могут поворачиваться на их новой оси y на величину, заданную ($i - 1) * $theta радианами, где $i индекс (начиная с одного) изображения и $theta = 2 * $PI / $n, $PI представляя математическую константу pi . Следовательно, второе изображение будет повернуто $theta третьим 2 * $theta , и так далее, до последнего изображения, которое будет повернуто ($n - 1) * $theta .

Это относительное расположение изображений будет сохранено во время поворотов карусели (т.е. Вращения вокруг измененной оси y ) благодаря иерархической природе вложенных преобразований CSS.

Это количество вращения каждого изображения может быть присвоено с помощью @for директивы управления Sass:

Carousel figure img { @for $i from 2 through $n { &:nth-child(#{$i}) { transform: rotateY(#{($i - 1) * $theta}rad); } } }

Это использует for...through конструкцию, а не for...to потому, что вместо for...to последнего значения, присвоенного переменной индекса $i , будет n-1 вместо n .

Обратите внимание на два примера #{} синтаксиса интерполяции Sass . В первом случае он используется для индекса:nth-child() селектора;
Во втором случае он используется для установки значения свойства вращения.

Вычисление Apothem

Вычисление апофемы полигона зависит от количества сторон и ширины стороны, то есть, на $n и $item-width переменных.
Формула:

$image-width / (2 * tan($PI/$n))

Где tan() - касательная тригонометрическая функция.

Эта формула может быть получена с некоторой геометрией и тригонометрией. В источнике пера эта формула не реализована так, как написано, потому что тангенциальная функция недоступна в Sass, поэтому вместо этого используется твердое значение. Формула будет полностью реализована в демонстрации JavaScript вместо этого.

Расстояние между элементами карусели

На этом этапе изображения карусели «зашиты» бок о бок, образуя требуемую полигональную форму. Но здесь они плотно упакованы, а часто в трехмерных каруселях между ними есть пространство. Это расстояние повышает восприятие 3D-пространства, потому что оно позволяет вам видеть обратные изображения на задней части карусели.

Можно дополнительно добавить этот промежуток между изображениями, введя другую конфигурационную переменную $item-separation и используя ее в качестве горизонтальной прокладки для каждого элемента. Точнее, взяв половину этого значения для левого и правого заполнения:

Carousel figure img { padding: 0 $item-separation / 2; }

Изображения сделаны полупрозрачными с opacity свойством, чтобы лучше проиллюстрировать структуру карусели, а гибкая макета на корневом элементе карусели использовалась для вертикального центрирования ее в окне просмотра.

Вращение карусели

Чтобы облегчить тестирование поворота карусели, я собираюсь добавить элемент управления пользовательского интерфейса, чтобы перемещаться между изображениями. См. Демо-версию CodePen для HTML, CSS и JavaScript, реализующих этот элемент управления; Здесь я опишу только код, относящийся к вращению.

Мы используем currImage целочисленную переменную, указывающую, какое изображение находится впереди карусели. Когда пользователь взаимодействует с предыдущими / последующими кнопками, эта переменная увеличивается или уменьшается на единицу.

После обновления currImage , поворот карусели выполняется с помощью:

Figure.style.transform = `rotateY(${currImage * -theta}rad)`;

(Здесь и в следующих фрагментах литералы шаблонов ES6 используются для интерполяции выражений в строках, не стесняйтесь использовать традиционный оператор конкатенации «+», если вы предпочитаете)

Где theta то же самое, что и раньше:

NumImages = figure.childElementCount; theta = 2 * Math.PI / numImages;

Вращение происходит - theta из-за того, что для перехода к следующему пункту требуется вращение против часовой стрелки, и такие значения поворота отрицательны в преобразованиях CSS.

Обратите внимание, что это currImageзначение не ограничено диапазоном , но вместо этого оно может расти бесконечно, как в положительном, так и в отрицательном направлении. На самом деле, если изображение на передней панели является последним (так currImage== n-1), и пользователь нажимает следующую кнопку, если мы переустановим currImageна 0, чтобы перейти к первому изображению карусели, произойдет переход Угол поворота от (n-1)*theta до 0, и это повернет карусель в противоположном направлении по всем предыдущим изображениям. Аналогичная проблема может возникнуть при нажатии кнопки prev, когда первое изображение является первым.

Чтобы быть разборчивым, я должен даже проверить потенциальные переполнения currentImage , потому что Number тип данных не может принимать сколь угодно большие значения. Эти проверки не реализованы в демо-коде.

Увидев базовый CSS, лежащий в основе карусели, теперь JavaScript можно использовать для улучшения компонента несколькими способами, такими как:

  • Произвольное количество изображений
  • Изображения с процентной шириной
  • Несколько экземпляров карусели на странице
  • Конфигурации для каждого экземпляра, такие как размер зазора и видимость на обратной стороне
  • Конфигурация с использованием атрибутов данных HTML5 *

Сначала я удаляю из таблицы стилей переменные и правила, связанные с происхождением преобразования и поворотами, потому что это будет сделано с использованием JavaScript:

$item-width: 40%; // Now we can use percentages $item-separation: 0px; // This now is set with Js $viewer-distance: 500px; .carousel { padding: 20px; perspective: $viewer-distance; overflow: hidden; display: flex; flex-direction: column; align-items: center; > * { flex: 0 0 auto; } figure { margin: 0; width: $item-width; transform-style: preserve-3d; transition: transform 0.5s; img { width: 100%; box-sizing: border-box; padding: 0 $item-separation / 2; &:not(:first-of-type) { position: absolute; left: 0; top: 0; } } } }

Function carousel(root) { // coming soon... }

root Аргумент относится к элементу DOM , который содержит карусель.

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

Чтобы создать несколько компонентов на одной странице, код ожидает, что все изображения будут загружены, зарегистрировав слушателя на объекте окна для loadсобытия, а затем вызовет carousel() для каждого элемента с carouselклассом:

Window.addEventListener("load", () => { var carousels = document.querySelectorAll(".carousel"); for (var i = 0; i < carousels.length; i++) { carousel(carousels[i]); } });

carousel() Выполняет три основные задачи:

  • Настройка навигации.
  • Настройка трансформаций
  • Зарегистрируйте слушателя с изменением размера окна, чтобы сохранить отзыв карусели, адаптировав его к новому размеру видового экрана

Перед рассмотрением кода настройки преобразования я рассмотрю некоторые ключевые переменные и как они инициализируются на основе конфигурации экземпляра:

Var figure = root.querySelector("figure"), images = figure.children, n = images.length, gap = root.dataset.gap || 0, bfc = "bfc" in root.dataset ;

Количество изображений (n) инициализируется в зависимости от количества дочерних элементов элемента. Разделение между слайдами (gap) , инициализируется из data-gap атрибута HTML5 , если установлено. Флаг видимости обратной стороны (bfc) читается с использованием API набора данных HTML5. Это будет использоваться позже, чтобы определить, должны ли изображения на обратной стороне карусели быть видимыми или нет.

Настройка преобразований CSS

Код, который устанавливает свойства, связанные с преобразованиями CSS, инкапсулируется в setupCarousel(). Эта вложенная функция принимает два аргумента. Первое - количество элементов в карусели, то есть nвведенная выше переменная. Второй параметр s- длина стороны многоугольника карусели. Как я упоминал ранее, это равно ширине изображений, поэтому можно прочитать текущую ширину одного из них getComputedStyle():

SetupCarousel(n, parseFloat(getComputedStyle(images).width));

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

Window.addEventListener("resize", () => { setupCarousel(n, parseFloat(getComputedStyle(images).width)); });

Для простоты я не разбираюсь в слушателе изменения размера.

Первое, что setupCarousel() нужно сделать, - вычислить apothem многоугольника, используя переданные параметры и ранее обсуждавшуюся формулу:

Apothem = s / (2 * Math.tan(Math.PI / n));

Затем это значение используется для изменения начала преобразования фигурного элемента для получения новой оси вращения карусели:

Figure.style.transformOrigin = `50% 50% ${-apothem}px`;

Затем применяются стили для изображений:

For (var i = 0; i < n; i++) { images[i].style.padding = `${gap}px`; } for (i = 1; i < n; i++) { images[i].style.transformOrigin = `50% 50% ${- apothem}px`; images[i].style.transform = `rotateY(${i * theta}rad)`; } if (bfc) { for (i = 0; i < n; i++) { images[i].style.backfaceVisibility = "hidden"; } }

Первый цикл присваивает пробел для пространства между элементами карусели. Второй цикл устанавливает 3D-преобразования. Последний цикл обрабатывает обратные грани, если соответствующий флаг был указан в конфигурации карусели.

Наконец, rotateCarousel() вызывается, чтобы перенести текущее изображение на передний план. Это небольшая вспомогательная функция, которая, учитывая индекс отображаемого изображения, поворачивает фигурный элемент по оси Y для перемещения целевого изображения вперед. Он также используется навигационным кодом для перехода туда и обратно:

Function rotateCarousel(imageIndex) { figure.style.transform = `rotateY(${imageIndex * -theta}rad)`; }

Вот окончательный результат, демонстрация, в которой создаются несколько каруселей, каждая из которых имеет другую конфигурацию.

Знаете, чем меняться выгоднее всего? Идеями. От этого их становится больше, чего не скажешь о материальных вещах. Самые яркие идеи распространяются через TED. На видео с этой конференции можно услышать и о пользе ежедневной медитации, и о том, как бегает по потолку геккон. Я хотел бы рассказать вам, почему стоит смотреть такие видео каждый день.

Станьте частью TED-сообщества или создайте своё

Смотреть TED можно не только в записи, но и вживую. Конференция TED предназначена для распространения идей. У неё это получается просто замечательно. Поэтому неудивительно, что становятся популярны не только сами идеи, но и формат их распространения. Так, в Москве 2 июля прошёл TEDxSadovoeRing . В каждом крупном городе находятся желающие сделать свой TEDx.

Например, я был на нескольких TEDxDonetsk. Один из них был полноценной конференцией, а два других - встречами на два-три оратора. На любой из этих встреч было интересно не только послушать, но и познакомиться с людьми, заряженными стилем мышления TED. Кто знает, может, на одном из TEDx вы познакомитесь с вашим будущим бизнес-партнёром или второй половинкой?

TED можно смотреть в любом месте

Меня, как и каждого из нас, раздражает ожидание. Например, сегодня мне пришлось ждать в общей сложности 40 минут. А ведь день ещё не закончился. Тратить на это время и нервы - непозволительная роскошь. Есть везунчики, у которых получается сконцентрироваться на чтении на пять минут, а потом переключиться на другие дела. К сожалению, я к таковым не отношусь. Поэтому мой выбор - это видео TED. Раз в неделю сохранив на свой смартфон десяток новых видео, вы можете не терять время в очередях или других подобных ситуациях. Для каждой из платформ есть свои приложения.

Единственное, чего мне не хватает в приложении для iOS, которым я пользуюсь, - это регулятор скорости проигрывания.

TED позволяет тренировать английский

Я предпочитаю смотреть TED в оригинале с субтитрами. Мне нравится так практиковать свой английский. Это не всегда легко: иногда возникают сложности со специализированной лексикой.

Если ваш уровень английского пока ещё не позволяет наслаждаться шутками спикеров, то попробуйте LinguaLeo. У них как раз появился раздел, посвящённый видео с TED. В настоящий момент их там 128, но добавления происходят каждый день.

TED улучшает ваши навыки оратора

Есть такое понятие, как неосознанная компетентность. Мы можем что-то уметь или знать, сами об этом не догадываясь. Например, вы никогда в жизни не останавливали сильное кровотечение - и слава богу! Даже не ходя на курсы первой помощи, я представляю, как наложить жгут. Спасибо боевикам: в них столько раз показывали сцену наложения жгута, что подсознание подскажет, как это делать.

Давайте вернёмся к спикерам с конференций TED. Они все разные. Каждый из них - специалист в своей сфере и говорит очень увлечённо. Хотите вы того или нет, но ваш мозг будет запоминать их манеру держаться на сцене, интонацию, жестикуляцию и тысячи других мелочей, из которых и складывается навык успешного оратора. Будете ли вы практиковаться, чтобы эта вырабатывающаяся неосознанная компетентность стала уверенным навыком, зависит только от вас. Причём TED даст вам пример не только того, как говорить, но и о чём говорить.

Подбирая картинки к этой статье, я обнаружил книжку «Выступление в стиле TED » Джереми Донован. Если вы её читали, поделитесь своими впечатлениями.

TED расширяет ваш кругозор

Миссия TED - это распространение уникальных и важных идей. Лайфхакеру близки многие из них. Поэтому каждый вечер Ирина Баранская отбирает одно из самый интересных и злободневных видео. Из последних мне больше всего понравилось « » . В нём есть о чём подумать. Скоро будет и на Лайфхакере, и на канале TED. Главное, посмотрев его, задуматься над той идей, которую хотел донести до нас спикер.

А какие идеи и видео с TED вам больше всего запали в душу?