-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcartJS.js
More file actions
175 lines (146 loc) · 8.98 KB
/
cartJS.js
File metadata and controls
175 lines (146 loc) · 8.98 KB
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/* Функція для завантаження елементів кошика */
function loadCartItems() {
/* Отримання контейнера для елементів кошика */
const cartItemsContainer = document.getElementById("cart-items");
/* Завантаження елементів кошика з локального сховища або створення порожнього масиву */
const cartItems = JSON.parse(localStorage.getItem("cartItems")) || [];
/* Ініціалізація загальної суми */
let total = 0;
/* Очищення контейнера перед додаванням нових елементів */
cartItemsContainer.innerHTML = "";
/* Перебір кожного елемента кошика */
cartItems.forEach(item => {
/* Обчислення загальної вартості для одного елемента */
const itemTotalPrice = item.price * item.quantity;
/* Додавання вартості елемента до загальної суми */
total += itemTotalPrice;
/* Створення контейнера для одного елемента кошика */
const cartItem = document.createElement("div");
cartItem.className = "cart-item"; /* Додавання класу для стилізації */
/* Додавання HTML-коду для відображення даних про елемент */
cartItem.innerHTML = `
<img src="${item.imageSrc}" alt="${item.title}"> <!-- Зображення товару -->
<div class="item-details">
<h3>${item.title}</h3> <!-- Назва товару -->
<p>Ціна: $${item.price}</p> <!-- Ціна за одиницю -->
<div class="item-quantity">
<button onclick="changeQuantity('${item.title}', -1)">-</button> <!-- Зменшення кількості -->
<input type="text" value="${item.quantity}" readonly> <!-- Поле кількості -->
<button onclick="changeQuantity('${item.title}', 1)">+</button> <!-- Збільшення кількості -->
<button class="delete-button" onclick="removeItem('${item.title}')">
<i class="fas fa-trash-alt"></i> Видалити <!-- Кнопка видалення -->
</button>
</div>
</div>
<p>Сума: $${itemTotalPrice}</p> <!-- Загальна вартість для цього товару -->
`;
/* Додавання елемента до контейнера кошика */
cartItemsContainer.appendChild(cartItem);
});
/* Оновлення тексту загальної суми на сторінці */
document.getElementById("total-price").textContent = `Загальна сума: $${total.toFixed(2)}`;
}
/* Функція для видалення елемента з кошика */
function removeItem(title) {
/* Завантаження елементів кошика з локального сховища */
let cartItems = JSON.parse(localStorage.getItem("cartItems"));
/* Фільтрація елементів, щоб виключити той, що потрібно видалити */
cartItems = cartItems.filter(item => item.title !== title);
/* Оновлення локального сховища новими даними */
localStorage.setItem("cartItems", JSON.stringify(cartItems));
/* Перезавантаження елементів кошика */
loadCartItems();
}
/* Функція для зміни кількості товару */
function changeQuantity(title, amount) {
/* Завантаження елементів кошика з локального сховища */
let cartItems = JSON.parse(localStorage.getItem("cartItems"));
/* Пошук товару за назвою */
const item = cartItems.find(item => item.title === title);
if (item) { /* Якщо товар знайдено */
item.quantity += amount; /* Зміна кількості товару */
/* Перевірка на мінімальну кількість */
if (item.quantity < 1) {
alert("Кількість товару повинна бути більше одного для покупки.");
item.quantity = 1;
}
/* Перевірка на максимальну кількість */
else if (item.quantity > 10) {
alert("Неможливо замовити більше 10 товарів за раз.");
item.quantity = 10;
}
/* Оновлення локального сховища */
localStorage.setItem("cartItems", JSON.stringify(cartItems));
/* Перезавантаження елементів кошика */
loadCartItems();
}
}
/* Функція для оформлення замовлення */
function checkout() {
/* Завантаження елементів кошика з локального сховища */
const cartItems = JSON.parse(localStorage.getItem("cartItems")) || [];
/* Якщо кошик порожній, відображення повідомлення */
if (cartItems.length === 0) {
alert("Ваш кошик порожній. Додайте товари до кошика перед оформленням замовлення.");
return;
}
/* Запит ПІБ користувача */
const name = prompt("Введіть ПІБ (до 30 символів):");
if (name === null) return; /* Перевірка на скасування введення */
if (!validateName(name)) return; /* Перевірка валідності імені */
/* Запит віку користувача */
const age = prompt("Введіть ваш вік:");
if (age === null) return; /* Перевірка на скасування введення */
if (!validateAge(age)) return; /* Перевірка валідності віку */
/* Запит номера картки */
const cardNumber = prompt("Введіть номер картки (16 цифр):");
if (cardNumber === null) return; /* Перевірка на скасування введення */
if (!validateCardNumber(cardNumber)) return; /* Перевірка валідності номера картки */
/* Підтвердження замовлення */
alert(`Ваш заказ оформлено! \n
ПІБ: ${name} \n
Вік: ${age} \n
Номер картки: ${cardNumber}`);
}
/* Функція для перевірки валідності ПІБ */
function validateName(name) {
if (!name) { /* Якщо поле порожнє */
alert("Поле ПІБ не може бути порожнім.");
return false;
}
if (name.length > 30) { /* Якщо ПІБ перевищує 30 символів */
alert("ПІБ не повинен перевищувати 30 символів.");
return false;
}
if (/[^а-яА-ЯёЁa-zA-Z\s]/.test(name)) { /* Якщо ПІБ містить недозволені символи */
alert("ПІБ має містити лише літери.");
return false;
}
return true; /* Валідне ПІБ */
}
/* Функція для перевірки валідності віку */
function validateAge(age) {
if (!age) { /* Якщо поле порожнє */
alert("Поле вік не може бути порожнім.");
return false;
}
if (isNaN(age) || age < 18 || age > 100) { /* Якщо вік не є числом або виходить за допустимі межі */
alert("Вік має бути числом від 18 до 100.");
return false;
}
return true; /* Валідний вік */
}
/* Функція для перевірки валідності номера картки */
function validateCardNumber(cardNumber) {
if (!cardNumber) { /* Якщо поле порожнє */
alert("Поле номер картки не може бути порожнім.");
return false;
}
if (cardNumber.length !== 16 || /[^\d]/.test(cardNumber)) { /* Якщо номер картки не складається з 16 цифр */
alert("Номер картки має містити лише 16 цифр.");
return false;
}
return true; /* Валідний номер картки */
}
/* Завантаження елементів кошика після завантаження сторінки */
document.addEventListener("DOMContentLoaded", loadCartItems);