Домашнее задание к занятию 2.3 «Изменение структуры HTML-документа».
Необходимо написать механизм добавления товаров в корзину.
- Основная HTML-разметка
- Базовая CSS-разметка
Карточка товара представляет разметку вида:
<div class="product" data-id="1">
<!-- ... -->
</div>
Содержимое атрибута data-id - уникальный идентификатор товара (артикул).
Управление количеством товара представлено следующей разметкой:
<div class="product__quantity-controls">
<div class="product__quantity-control product__quantity-control_dec">
-
</div>
<div class="product__quantity-value">
1
</div>
<div class="product__quantity-control product__quantity-control_inc">
+
</div>
</div>
Нажимая на элементы с классом product__quantity-control необходимо уменьшить или увеличить значение в элементе с классом product__quantity-value
Товар в корзине представляется следующей разметкой:
<div class="cart__product" data-id="1">
<img class="cart__product-image" src="image.png">
<div class="cart__product-count">20</div>
</div>
При добавлении товара в корзину:
- Копируется его артикул и изображение
- Количество товаров добавляется или увеличивается в соответствии с выбранным значением (которое находится в .product__quantity-value)
Иными словами:
- Элемент с классом cart__product имеет атрибут data-id. Его значение берётся из атрибута data-id (артикула товара) карточки товара (элемент с классом product)
- В элементе с классом cart__product-image, атрибут src cодержит изображение товара (содержимое src элемента с классом product__image)
- При нажатии на кнопки увеличения/уменьшения количества товаров, число должно также меняться. Минимальное число товаров - 1 (отрицательные значения не допускаются)
- Реализуйте добавление товара в корзину с заданным количеством.
- Если товар уже имеется в корзине, количество необходимо увеличить, не добавляя в корзину новый элемент.
- Сделайте удаление товаров из корзины
- Показывайте корзину (и заголовок) только если в корзине есть хотя бы один товар
При необходимости, вы можете дописывать самостоятельно CSS или HTML-код.
Сделайте эффект перемещения товара в корзину по такому принципу:
Принцип основан на создании копии изображения, которая за равные промежутки времени перемещается из одной части экрана в другую. Используйте абсолютное позиционирование и свойства left/top.
При необходимости, вы можете дописывать самостоятельно CSS или HTML-код.
Сделайте сохранение списка добавленных в корзину товаров даже после обновления страницы.
В будущих лекциях мы будем касаться локального хранилища (localStorage). Для решения этой задачи, вам потребуется познакомиться с темой уже сейчас.
Материалы для изучения:
Используемые темы
- Метод getBoundingClientRect (повышенный уровень сложности)
- Работа с объектом dataset
Советы
При реализации анимации, вам необходимо:
- Получить у изображения-продукта его координаты через getBoundingClientRect
- Получить у изображения в корзине его координаты через getBoundingClientRect
- Высчитать разницу между двумя изображениями по оси X и по оси Y
- Задать количество шагов, за которое одно изображение «настигнет другое»
- С помощью setTimeout/setInterval в течение заданного количества шагов постоянно уменьшать разницу между двумя картинками
- По окончанию анимации удалить изображение-копию
- Перейти в папку задания.
cd ./document-structure/cart
. - Открыть файл
task.js
в вашем редакторе кода и выполнить задание. - Открыть файл
task.html
в вашем браузере и убедиться в правильности выводимых результатов. - Добавить файл
task.js
в индекс git с помощью командыgit add %file-path%
, где %file-path% - путь до целевого файла.git add task.js
. - Сделать коммит используя команду
git commit -m '%comment%'
, где %comment% - это произвольный комментарий к вашему коммиту.git commit -m 'first commit cart'
. - Опубликовать код в репозиторий homeworks с помощью команды
git push -u origin master
. - Прислать ссылку на репозиторий через личный кабинет на сайте Нетологии.
Никаких файлов прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачета. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом "На доработке".
Любые вопросы по решению задач задавайте в чате учебной группы.