Введение
В этом проекте вы научитесь реализовывать онлайн-корзину покупок с возможностью перетаскивания элементов. Цель этого проекта - помочь вам понять и применить концепции Vue.js и API перетаскивания элементов, предоставляемые веб-браузерами.
👀 Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- настраивать проект и знакомиться с предоставленными файлами и структурой;
- реализовывать функциональность перетаскивания элементов для онлайн-корзины покупок, позволяющую пользователям добавлять продукты в корзину;
- отображать информацию о корзине покупок, включая количество продуктов, детали продуктов и общую стоимость;
- тестировать онлайн-корзину покупок и убедиться, что функциональность работает как ожидается.
🏆 Достижения
После завершения этого проекта вы сможете:
- использовать Vue.js для создания веб-приложения;
- реализовывать функциональность перетаскивания элементов с использованием встроенных API веб-браузера;
- отображать динамические данные и обновлять пользовательский интерфейс на основе взаимодействий пользователя;
- писать чистый и поддерживаемый код, организовывая ваше приложение в компоненты.
Настройка структуры проекта
В этом шаге вы настроите файлы и структуру проекта. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте папку проекта. Структура каталогов следующая:
├── images
│ ├── book.jpeg
│ ├── box.jpeg
│ ├── paper.jpeg
│ ├── trolley.jpeg
│ └── tv.jpg
├── index.css
├── index.html
├── js
│ ├── http-vue-loader.js
│ └── vue.min.js
└── trolley.vue
В них:
- папка
imagesсодержит изображения продуктов, необходимые для страницы; index.css- файл со стилями;index.html- главная страница;js/vue.min.jsиjs/http-vue-loader.js- файлы, связанные с библиотекой Vue;trolley.vue- файл компонента, который необходимо заполнить.
Нажмите кнопку Go Live в нижнем правом углу WebIDE, чтобы запустить проект.
Далее откройте "Web 8080" в верхней части ВМ и обновите ее вручную, и вы увидите страницу.
Реализация функциональности перетаскивания элементов
В этом шаге вы реализуете функциональность перетаскивания элементов для онлайн-корзины покупок.
- Откройте файл
trolley.vue. - В функции
data()вы можете увидеть массивgoods, который содержит информацию о продуктах. Эти данные будут использоваться для отображения продуктов в разделе "Список товаров". - Добавьте следующий код в раздел
methods:
methods: {
dragstart(e, good) {
e.dataTransfer.setData("name", good.name);
e.dataTransfer.setData("price", good.price);
},
dragover(e) {
e.preventDefault();
},
drop(e) {
const { bought } = this;
const name = e.dataTransfer.getData("name");
const price = e.dataTransfer.getData("price");
bought.push({ name, price: Number(price) });
}
}
Пояснение:
- Метод
dragstartвызывается, когда пользователь начинает перетаскивать продукт. Он задает имя и цену продукта в объектеdataTransfer, который можно получить позже в методеdrop. - Метод
dragoverвызывается, когда перетаскиваемый элемент находится над корзиной покупок. Он предотвращает стандартное поведение браузера, что необходимо для работы событияdrop. - Метод
dropвызывается, когда пользователь отпускает перетаскиваемый элемент в корзину покупок. Он извлекает имя и цену продукта из объектаdataTransferи добавляет продукт в массивbought.
- В разделе
computedдобавьте следующий код:
computed: {
totalPrice() {
const { bought } = this;
var sum = 0;
for (key in bought) {
sum += bought[key].price;
}
return sum;
},
goodsDetail() {
const { bought } = this;
const names = [];
const goods = [];
for (key in bought) {
names.push(bought[key].name);
}
function getRepeatNum() {
return names.reduce(function (prev, next) {
prev[next] = prev[next] + 1 || 1;
return prev;
}, {});
}
for (key in getRepeatNum()) {
goods.push(`${key}*${getRepeatNum()[key]}`);
}
return goods.join(" ");
}
},
Пояснение:
- Вычисляемое свойство
totalPriceвычисляет общую стоимость продуктов в корзине покупок. - Вычисляемое свойство
goodsDetailгенерирует детали продуктов в корзине покупок, отображая имя продукта и количество.
Привязка событий перетаскивания элементов к HTML
В этом шаге нам нужно связать событие перетаскивания элементов с тегом div.
- В разделе
templateфайлаtrolley.vueнайдите элемент<div class="good-list">. - В элементе
<div class="good-list">измените код на следующий:
<div class="good-list">
<div
v-for="good in goods"
:key="good.name"
class="good"
draggable="true"
@dragstart="dragstart($event, good)"
>
<img :src="good.cover" draggable="false" />
<span>{{ good.name }}</span>
<span>$ {{ good.price }}</span>
</div>
</div>
- Найдите элемент
<div class="trolley" id="trolley">. - Измените элемент
<div class="trolley" id="trolley">на следующий код:
<div id="trolley" class="trolley" @dragover="dragover" @drop="drop">
<span id="bought" class="bought" v-if="bought.length!== 0"
>{{ bought.length }}</span
>
<img src="./images/trolley.jpeg" />
</div>
Тестирование онлайн-магазинской корзины
- Сохраните файл
trolley.vue. - Обновите страницу, чтобы увидеть исходное состояние онлайн-корзины покупок.
- Попробуйте перетащить изображения продуктов в корзину покупок.
- Наблюдайте за изменениями в корзине покупок, включая количество продуктов, детали продуктов и общую стоимость.
- Убедитесь, что функциональность работает как ожидается.
Финальный результат реализации выглядит так:

Поздравляем! Вы успешно реализовали онлайн-корзину покупок с использованием предоставленного базового проекта и функциональности перетаскивания элементов.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете выполнить больше лабораторных работ в LabEx, чтобы улучшить свои навыки.



