Когда речь идет о компании, которая собаку съела на дизайне, то вы скорее всего вспомните Apple. Просто посмотрите, как оформлены ее новые продукты, каталог, ее сайт — есть чем полюбоваться.
На этой неделе мы делаем красивую галерею слайд-шоу, похожую на ту, что Apple использует в своих сайтах для демонстрации своей продукции.
Создаем только клиентскую часть галереи, серверную часть трогать не будем.
Качаем пример и далее смотрим первый шаг.
Шаг 1 – XHTML
Для этой галереи ничего не нужно из PHP или баз данных. Это означает, что ее действительно легко внедрять в существующий сайт, вам всего лишь нужно изменить пару строчек HTML кода.
Давайте посмотрим на HTML разметку:
demo.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<div id="main"> <div id="gallery"> <div id="slides"> <div class="slide"><img src="img/sample_slides/macbook.jpg" width="920" height="400" /></div> <div class="slide"><img src="img/sample_slides/iphone.jpg" width="920" height="400" /></div> <div class="slide"><img src="img/sample_slides/imac.jpg" width="920" height="400" /></div> </div> <div id="menu"> <ul> <li class="fbar"> </li><li class="menuItem"><a href=""><img src="img/sample_slides/thumb_macbook.png" /></a></li><li class="menuItem"><a href=""><img src="img/sample_slides/thumb_iphone.png" /></a></li><li class="menuItem"><a href=""><img src="img/sample_slides/thumb_imac.png" /></a></li> </ul> </div> </div> </div> |
Идея проста. Создаем два основных контейнера DIV
. Один с id=”menu”, содержащим превью-картинки, второй с id=”slides”, содержащим сами слайды.
Чтобы добавить новый слайд, вы просто добавляете новый элемент в первый и второй контейнеры. Слайд в JPG формате, а превьюшки в прозрачном PNG, но вы можете использовать любое изображение нужного типа.
Вы даже можете поместить любой HTML код в каждый слайд. На пример, поставить гиперссылку, а в нее поместить изображение.
Тем не менее, важно помнить об атрибутах width и height при установки изображений для слайдов. Эти атрибуты используются в jQuery для определения ширины области слайдов.
Также обратите внимание на элементы LI
в контейнере превьюшек. Первому пустому элементу назначено имя класса fbar, и он используется, как вертикальный разделитель, а остальным элементам назначено имя класса menuItem, и они используются, как кнопки управления слайд-шоу.
Теперь приступим к следующему шагу.
Шаг 2 – CSS
Давайте теперь посмотрим, что скрыто в нашей таблице стилей. В статье мы вывели не все стили, а только те что используются в оформлении галереи, в исходниках вы найдете полный вариант оформления.
demo.css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
body,h1,h2,h3,p,quote,small,form,input,ul,li,ol,label{ /* Сброс */ margin:0px; padding:0px; } body{ /* Установка цвета текста, фона и шрифта */ color:#444444; font-size:13px; background: #f2f2f2; font-family:Arial, Helvetica, sans-serif; } /* Галерея */ #gallery{ /* CSS3 тень галереи */ -moz-box-shadow:0 0 3px #AAAAAA; -webkit-box-shadow:0 0 3px #AAAAAA; box-shadow:0 0 3px #AAAAAA; /* CSS3 округленные углы */ -moz-border-radius-bottomleft:4px; -webkit-border-bottom-left-radius:4px; border-bottom-left-radius:4px; -moz-border-radius-bottomright:4px; -webkit-border-bottom-right-radius:4px; border-bottom-right-radius:4px; border:1px solid white; background:url(img/panel.jpg) repeat-x bottom center #ffffff; /* Ширина гелереи */ width:920px; overflow:hidden; } #slides{ /* Область слайдов */ height:400px; /* jQuery изменяет ширину позже, по сумме ширины всех слайдов. */ width:920px; overflow:hidden; } .slide{ float:left; } #menu{ /* Этот контейнер для превьюшек */ height:45px; } ul{ margin:0px; padding:0px; } li{ /* Каждая превьюшка - это элемент li */ width:60px; display:inline-block; list-style:none; height:45px; overflow:hidden; } li.inact:hover{ background:url(img/pic_bg.png) repeat; } li.act,li.act:hover{ background:url(img/active_bg.png) no-repeat; } li.act a{ cursor:default; } .fbar{ width:2px; background:url(img/divider.png) no-repeat right; } li a{ display:block; background:url(img/divider.png) no-repeat right; height:35px; padding-top:10px; } a img{ border:none; } |
Мы использовали следующий набор свойств CSS3 для слайд-шоу галереи:
- box-shadow — делает в галереи легкие тени по краям. При использовании, помните о смещении по осям X и Y (в примере, 0 0), размытии (в примере, 3px) и цвете тени;
- border-radius — закругляет нижние углы галереи.
К сожалению, сейчас эти свойства поддерживаются только в Safari, Chrome и Firefox. Однако в остальных браузерах галерея будет не такой красивой, но все же полностью функциональной.
А теперь немного jQuery магии.
Шаг 3 – jQuery
Как уже упоминалось ранее, в галереи не используется код на стороне сервера, так что вся механика работы заложена в скриптах.
script.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$(document).ready(function(){ /* Код начнет исполняться после полной загрузки DOM */ var totWidth=0; var positions = new Array(); $('#slides .slide').each(function(i){ /* Просматриваем все слайды и суммируем их ширину в totWidth */ positions[i]= totWidth; totWidth += $(this).width(); if(!$(this).width()) { alert("Please, fill in width & height for all your images!"); return false; } }); $('#slides').width(totWidth); $('#menu ul li a').click(function(e){ /* Клик по превьюшке */ $('li.menuItem').removeClass('act').addClass('inact'); $(this).parent().addClass('act'); var pos = $(this).parent().prevAll('.menuItem').length; $('#slides').stop().animate({marginLeft:-positions[pos]+'px'},450); /* Старт анимации слайда */ e.preventDefault(); /* Предотвращения действия по умолчанию на ссылке */ }); $('#menu ul li.menuItem:first').addClass('act').siblings().addClass('inact'); /* При загрузке страницы помечаем первую превьюшку активной */ }); |
Основная идея этого скрипта в переборе всех слайдов, суммировании их ширины и присвоении этой суммы ширине контейнера DIV с id=”slides“. Поскольку у слайдов стоит свойство float
равное left
, то они стоят друг за другом.
Позже, когда вы щелкаете по превьюшке, скрипт вычисляет, какой слайд надо показывать и прокручивает DIV
#slides, применяя на нем отрицательный margin
с помощью метода animate. Такой эффект отлично смотрится на сайтах соцсетей, где много интересных картинок. Кстати, Создание социальной сети — вещь довольно забавная и в то же время сложная, и если вам нужен качественный веб-ресурс, то лучше довериться профессионалам.
Всего 40 строчек кода и слайд-шоу галерея в стиле Apple готова!
Выводы
В три простых шага мы сделали красивую слайд-шоу галерею, как у Apple. И которая может быть внедрена на любой сайт с помощью нескольких строчек кода.
Вы можете свободно модифицировать и развивать эту галерею в своих проектах. А если у вас возникли какие-то вопросы, то смело задавайте их, мы вам поможем.
Добрый день!
Начал ковырять это слайд-шоу, и возникли трудности. Хочу из него построить меню как тутwww.apple.com/mac/ . Вот сделал набросок , залил туда 14 фоток, и хочу чтоб при нажатии на первую превьюшку отображались только Маки, на вторую только программы и на третью только аксессуары. Как правильно это сделать?
Заранее спасибо.
в каждый элемент
DIV
с классомslide
выставляете 5 картинокбудет примерно как на apple.com
Добрый день! Хорошая галерея получилась, все работает, но есть одно «но» — если полистать галерею вручную с помощью превью, дальше она сама не перелистывается, пока не перезагрузишь страничку. Если убрать строку
if (!keepScroll) clearInterval (itvl);
то неправильно перелистывает. Подскажите, как правильно решить эту проблему? Спасибо
Нужно дописывать скрипт.
Логика примерно такая. После ручного перелистывания ждем секунд 10 и снова запускаем автоперелистывание.
Спасибо, буду разбираться
Добрый день!
При добавлении данного слайдера возникает конфликт
со стилем сайта, а именно тэг li теперь повторяется на сайте, по стилю слайдера,
хотя это как раз и не нужно. Вот сейчас ломаю голову каким образом переделать слайдер, заменить li на что то другое, чтобы не было конфликта?