-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpowerbankJS.js
More file actions
144 lines (125 loc) · 8.03 KB
/
Copy pathpowerbankJS.js
File metadata and controls
144 lines (125 loc) · 8.03 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
// Закриває модальне вікно, змінюючи стиль display на "none"
function closeProductModal() {
// Отримуємо елемент модального вікна за його ID та ховаємо його
document.getElementById("product-modal").style.display = "none";
}
// Показує кнопку "Переглянути" на картці, змінюючи її прозорість
function showButton(card) {
// Знаходимо елемент кнопки всередині переданої картки та встановлюємо прозорість у 1
card.querySelector('.view-button').style.opacity = 1;
}
// Приховує кнопку "Переглянути" на картці, змінюючи її прозорість
function hideButton(card) {
// Знаходимо елемент кнопки всередині переданої картки та встановлюємо прозорість у 0
card.querySelector('.view-button').style.opacity = 0;
}
// Сортує або перемішує список повербанків залежно від вибраної опції
function shufflePowerbanks() {
// Отримуємо список усіх карток повербанків
const powerbankList = document.querySelector('.powerbank-list');
// Преобразуємо дочірні елементи списку в масив
const powerbanks = Array.from(powerbankList.children);
// Отримуємо вибраний параметр сортування
const sortOption = document.getElementById('sort-options').value;
// Перевіряємо, чи сортування за ціною
if (sortOption === 'price-asc' || sortOption === 'price-desc') {
// Сортуємо масив карток за ціною у зростаючому або спадному порядку
powerbanks.sort((a, b) => {
// Отримуємо значення ціни кожної картки
const priceA = parseFloat(a.getAttribute('data-price'));
const priceB = parseFloat(b.getAttribute('data-price'));
// Виконуємо сортування залежно від вибраної опції
return sortOption === 'price-asc' ? priceA - priceB : priceB - priceA;
});
} else {
// Виконуємо псевдорандомне перемішування карток
let originalOrder = powerbanks.slice(); // Зберігаємо початковий порядок карток
do {
// Перемішуємо картки за допомогою Math.random
powerbanks.sort(() => Math.random() - 0.5);
} while (
powerbanks.every(
(powerbank, index) => powerbank === originalOrder[index]
)
); // Перевіряємо, щоб порядок відрізнявся від початкового
}
// Додаємо відсортовані картки назад до контейнера
powerbanks.forEach(powerbank => powerbankList.appendChild(powerbank));
}
// Фільтрує картки повербанків залежно від вибраних брендів
function filterPowerbanks() {
// Отримуємо всі прапорці у фільтрі
const checkboxes = document.querySelectorAll(
'.filter-group input[type="checkbox"]'
);
// Отримуємо масив значень вибраних брендів
const selectedBrands = Array.from(checkboxes)
.filter(checkbox => checkbox.checked) // Вибираємо лише активні прапорці
.map(checkbox => checkbox.value); // Отримуємо значення з прапорців
// Отримуємо всі картки повербанків
const powerbankCards = document.querySelectorAll('.powerbank-card');
// Проходимо по кожній картці
powerbankCards.forEach(card => {
// Визначаємо бренд картки на основі її заголовка
const brand = card.querySelector('.powerbank-title').textContent.split(' ')[0];
// Відображаємо або приховуємо картку залежно від вибраного бренду
if (selectedBrands.length === 0 || selectedBrands.includes(brand)) {
card.style.display = 'flex'; // Показуємо картку
} else {
card.style.display = 'none'; // Ховаємо картку
}
});
}
// Додає товар до локального сховища
function addToCart(product) {
// Зберігаємо об'єкт товару у локальному сховищі під ключем "addToCart"
localStorage.setItem('addToCart', JSON.stringify(product));
}
// Відображає деталі товару у модальному вікні
function showProductDetails(button) {
// Знаходимо картку, до якої належить кнопка
const card = button.closest('.powerbank-card');
// Отримуємо зображення товару з атрибуту data-image
const imageSrc = card.getAttribute('data-image');
// Отримуємо заголовок товару
const title = card.querySelector('.powerbank-title').textContent;
// Отримуємо ціну товару з атрибуту data-price
const price = card.getAttribute('data-price');
// Встановлюємо дані в модальне вікно
document.getElementById("modal-image").src = imageSrc;
document.getElementById("modal-title").textContent = title;
document.getElementById("modal-price").textContent = "Ціна: $" + price;
document.getElementById("product-modal").style.display = "flex"; // Показуємо модальне вікно
// Зберігаємо дані товару в атрибути кнопки "Купити"
document.querySelector(".buy-button").dataset.price = price;
document.querySelector(".buy-button").dataset.image = imageSrc;
}
// Додає товар до кошика у локальному сховищі
function addToCart(button) {
// Отримуємо заголовок товару
const title = document.getElementById("modal-title").textContent;
// Отримуємо ціну товару з атрибутів кнопки
const price = button.dataset.price;
// Отримуємо зображення товару з атрибутів кнопки
const imageSrc = button.dataset.image;
// Отримуємо існуючі товари з кошика або створюємо порожній масив
let cartItems = JSON.parse(localStorage.getItem('cartItems')) || [];
// Перевіряємо, чи товар вже є в кошику
const existingItem = cartItems.find(item => item.title === title);
if (existingItem) {
// Якщо товар є, збільшуємо його кількість
existingItem.quantity += 1;
} else {
// Якщо товару немає, додаємо його до масиву
cartItems.push({ title, price: parseFloat(price), imageSrc, quantity: 1 });
}
// Зберігаємо оновлений масив у локальному сховищі
localStorage.setItem('cartItems', JSON.stringify(cartItems));
// Виводимо повідомлення про успішне додавання
alert("Товар додано до кошика!");
}
// Додаємо обробник події кліку для кнопки
document.querySelector(".buy-button").addEventListener("click", function () {
// Викликаємо функцію додавання до кошика, передаючи поточну кнопку
addToCart(this);
});