Конструктор продуктов - полезные инструменты для покупок, которые позволяют потенциальным клиентам «строить» идеальную версию продукта, комбинируя различные варианты. В конце этого процесса пользователю обычно дается действие, чтобы выполнить: сохранить сборку, поделиться ею или купить продукт напрямую.
Создание такого веб-компонента с нуля - не легкая работа. Поэтому мы решили продемонстрировать простой в настройке шаблон, который поможет вам реализовать свой собственный продукт!
Создание структуры
Структура HTML состоит из трех основных элементов: заголовок header.main
для верхней навигации, div.cd-builder
для шагов конструктора и footer.cd-builder-footer
для нижней части конструктора и Обзор выбранного продукта.
<div class="cd-product-builder">
<header class="main-header">
<h1>Product Builder</h1>
<nav class="cd-builder-main-nav disabled">
<ul>
<li class="active"><a href="#models">Models</a></li>
<li><a href="#colors">Colors</a></li>
<li><a href="#accessories">Accessories</a></li>
<li><a href="#summary">Summary</a></li>
</ul>
</nav>
</header>
<div class="cd-builder-steps">
<ul>
<li data-selection="models" class="active builder-step">
<section class="cd-step-content">
<header>
<h1>Select Model</h1>
<span class="steps-indicator">Step <b>1</b> of 4</span>
</header>
<a href="#0" class="cd-nugget-info">Article & Downaload</a>
<ul class="models-list options-list cd-col-2">
<!-- models here -->
</ul>
</section>
</li>
<!-- additional content will be inserted using ajax -->
</ul>
</div>
<footer class="cd-builder-footer disabled step-1">
<div class="selected-product">
<img src="img/product01_col01.jpg" alt="Product preview">
<div class="tot-price">
<span>Total</span>
<span class="total">$<b>0</b></span>
</div>
</div>
<nav class="cd-builder-secondary-nav">
<ul>
<li class="next nav-item">
<ul>
<li class="visible"><a href="#0">Colors</a></li>
<li><a href="#0">Accessories</a></li>
<li><a href="#0">Summary</a></li>
<li class="buy"><a href="#0">Buy Now</a></li>
</ul>
</li>
<li class="prev nav-item">
<ul>
<li class="visible"><a href="#0">Models</a></li>
<li><a href="#0">Models</a></li>
<li><a href="#0">Colors</a></li>
<li><a href="#0">Accessories</a></li>
</ul>
</li>
</ul>
</nav>
<span class="alert">Please, select a model first!</span>
</footer>
</div>
Что касается шагов конструктора, только первая может быть найдена в файле index.html
. Другие шаги зависят от модели, которую пользователь выбирает и загружается с помощью Ajax (Подробнее в разделе «Обработка событий»).
Добавление стиля
CSS, используемый для этого ресурса, довольно прост, вы можете скачать демонстрационный файл, чтобы взглянуть на весь код.
Только одно примечание о стиле основных элементов: шаг div.cd-builder
используются для обертывания разных шагов конструктра; Его элементы списка находятся в абсолютном положении, имеют высоту и ширину 100%, являются одними поверх других и скрыты по умолчанию; Класс .active
затем используется для выявления активного шага.
.cd-builder-steps > ul {
height: 100%;
overflow: hidden;
}
.cd-builder-steps .builder-step {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: auto;
visibility: hidden;
transition: visibility .5s;
}
.cd-builder-steps .builder-step.active {
position: relative;
z-index: 2;
visibility: visible;
}
Обработка событий
Чтобы реализовать конструктор продукта, мы создали объект ProductBuilder и использовали функцию bindEvents
для прикрепления обработчиков событий к соответствующим элементам.
function ProductBuilder( element ) {
this.element = element;
this.stepsWrapper = this.element.children('.cd-builder-steps');
//...
this.bindEvents();
}
if( $('.cd-product-builder').length > 0 ) {
$('.cd-product-builder').each(function(){
//create a productBuilder object for each .cd-product-builder
new ProductBuilder($(this));
});
}
Когда пользователь выбирает одну из моделей, вызов Ajax заботится о загрузке нового контента для выбранной модели; Атрибут модели данных добавляется к каждому элементу списка внутри списка ul.models
и равен имени файла HTML, из которого новый контент должен быть извлечен (modelType в коде ниже).
$.ajax({
type : "GET",
dataType : "html",
url : modelType+".html",
beforeSend : function(){
self.loaded = false;
},
success : function(data){
self.models.after(data);
self.loaded = true;
//...
},
error : function(jqXHR, textStatus, errorThrown) {
//...
}
});
Каждый элемент списка имеет также цену данных, которая является ценой выбранной модели. Атрибуты цены данных также добавляются к другим параметрам внутри конструктора (цвета, принадлежности) и используются для обновления окончательной цены продукта.
Что касается возможных настроек продукта, мы использовали класс .options-list
для таргетинга списков опций, среди которых пользователь может выбрать (в наших примерных моделях и аксессуарах). Когда пользователь выбирает опцию, функция updateListOptions ()
заботится об обновлении цены продукта (и содержимого, если модель выбрана).
//detect click on one element in an options list (e.g, models, accessories)
this.optionsLists.on('click', '.js-option', function(event){
self.updateListOptions($(this));
});
Опция класса .js-option
добавляется к каждому элементу списка внутри списка ul.options
и используется для обнаружения события. Если параметры являются эксклюзивными (например, с моделями, поскольку вы можете выбрать только один вариант), добавляется второй класс .js-radio
.
Вместо этого используется настраиваемый класс .cd-product-customizer
, например, Colors, где пользователь может выбрать опцию и увидеть изменения в продукте. Когда выбран один из этих параметров, функция customizeModel ()
следит за обновлением предварительного просмотра продукта и цены на продукт (при необходимости).
//detect clicks on customizer controls (e.g., colors ...)
this.stepsWrapper.on('click', '.cd-product-customizer a', function(event){
event.preventDefault();
self.customizeModel($(this));
})