Лиллипуттен унд Нобле Артефакты 2015 Галерея обложек с динамической подгрузкой на AJAXРеализуем прокрутку изображений (обложек дисков) для сайта boogiemanmusic с динамической подгрузкой данных на AJAX. Исходные файлы:
Демо:Возможные задачи на доработку:
Информация из документации для программистов (markdown на bitbucket.org):См. пример на демо-сайте (логин/пароль: demo/demo). Составные файлы модуля:
Структура HTML:В самом коде располагается пустой контейнер, в который потом динамически загружаются данные:
Автоматически показывается анимированный значок ожидания, пока ничего не загружено и не сработали скрипты. Показ знака во время загрузки убран, т.к. сам механизм загрузки изменён (см. ниже). После первой загрузки показываются и инициализируются кнопки перелистывания «вперёд/назад». Во время каждой загрузки создаётся новый вложенный контейнер Генерируемый код для каждой обложки выглядит следующим образом: <item class="dist#{dist}" data-link="#{params.items[count].link}" data-image="#{params.items[count].cover}"> <item-info> <item-artist>#{params.items[count].artist}</item-artist> <item-name>#{params.items[count].title}</item-name> <item-more><item-country>#{params.items[count].country}</item-country> / <item-label>#{params.items[count].label}</item-label></item-more> <item-more><item-format>#{params.items[count].format}</item-format> / <item-number>#{params.items[count].number}</item-number></item-more> <item-price> <span class="buttons"> <button class="btn price"><b>#{params.items[count].price}</b> р.</button> <button class="btn cart"><span class="glyphicon glyphicon-shopping-cart"></span></button> </span> </item-price> </item-info> </item> (Код с подстановкой переменных из coffeescript.) Загрузка данныхСерверный скрипт (в демо-версии:
Скрипт возвращает данные в формате $json = [ 'object' => $object, 'token' => $token, 'go' => $go, 'canGoNext' => $canGoNext, 'canGoBack' => $canGoBack, 'items' => $itemsArray ]; Параметры Элемент списка обложек имеет следующую структуру: $itemsArray[$i] = [ 'artist' => 'Artist Name', 'title' => 'Album Title', 'country' => 'Country', 'label' => 'Label', 'format' => 'Format', 'number' => 'Number', 'cover' => 'SamplePix/CoverUrl.jpg', 'link' => '/Catalogue/LinkUrl/', 'price' => '3,500' ]; Обращаю внимание на то, что цена должна быть преформатирована в общепринятом на сайте формате. Кроме двух параметров типа «URL» ( Основные моменты работы алгоритма загрузки, показа данных и взаимодействия с пользователемИнициализацияПри инициализации объекта карусели и каждом изменении размера страницы происходит расчёт оптимального количества показываемых обложек, — в зависимости от доступного свободного пространства. Расчёт производится из предположения, что обложки должны перекрывать друг друга примерно наполовину. (Серверный скрипт может возвращать обложек меньше, чем затребовано.) Если объекту После этого производится первоначальная загрузка данных (с пустыми значениями параметров 'token' и 'go'). ЗагрузкаПри загрузке данных инициализируется AJAX-запрос к серверному скрипту, которому передаётся серверный идентификатор ( Загруженные данные выкладываются в созданную скрытую секцию ( Во время загрузки нажатая кнока «вперёд/назад» меняет вид, показывая, что идёт загрузка. Возможно, есть смысл сделать к.-то анимацию для большей очевидности. (См. ф-ции Демонстрационный скрипт с иллюстративной целью отрабатывает с задержкой в 1 секунду. Точно так же показывается возможность управлять кнопкой «назад» (случайным образом туда передаётся либо 0 либо 1.) Отработка кликаПри клике на обложке происходит проверка на сенсорное устройство через проверку свойств DOM:
Не знаю, везде ли это будет работать. Проверено на имеющемся в наличии реальном устройстве. Активация ссылки происходит в том случае, если это сенсорное устройство либо обложка уже показывается в увеличенном размере к.-то время (пока 500мс, полсекунды). При безусловной обработки клика на сенсорных устройствах нет возможности показать увеличенную обложку с информацией, т.к. в этом случае система совмещает события Т.е., в таких браузерах первый клик увеличивает обложку и показывает детальную информацию, а второй — уже переход по ссылке. Все исходные файлы в одном архиве: См. информацию о проекте boogiemanmusic. |
«Лиллипуттен унд Нобле» / Игорь А. Лилипутен <> |