-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathphoneJS.js
More file actions
133 lines (115 loc) · 7.65 KB
/
phoneJS.js
File metadata and controls
133 lines (115 loc) · 7.65 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
// Функція закриває модальне вікно продукту
function closeProductModal() {
// Встановлює display "none" для елемента з id "product-modal" (закриває модальне вікно)
document.getElementById("product-modal").style.display = "none";
}
// Функція показує кнопку "Переглянути товар" при наведенні на картку
function showButton(card) {
// Встановлює opacity кнопки "Переглянути товар" в 1 (робить її видимою)
card.querySelector('.view-button').style.opacity = 1;
}
// Функція ховає кнопку "Переглянути товар" при виведенні курсора з картки
function hideButton(card) {
// Встановлює opacity кнопки "Переглянути товар" в 0 (ховає її)
card.querySelector('.view-button').style.opacity = 0;
}
// Функція сортує телефони за ціною або випадковим чином
function shufflePhones() {
// Отримує список всіх телефонів в контейнері "phone-list"
const phoneList = document.querySelector('.phone-list');
// Перетворює всі елементи списку на масив
const phones = Array.from(phoneList.children);
// Отримує значення вибраної опції сортування
const sortOption = document.getElementById('sort-options').value;
// Перевіряє вибрану опцію сортування і сортує відповідно до неї
if (sortOption === 'price-asc') {
// Сортує телефони за ціною від меншої до більшої
phones.sort((a, b) => parseFloat(a.getAttribute('data-price')) - parseFloat(b.getAttribute('data-price')));
} else if (sortOption === 'price-desc') {
// Сортує телефони за ціною від більшої до меншої
phones.sort((a, b) => parseFloat(b.getAttribute('data-price')) - parseFloat(a.getAttribute('data-price')));
} else {
// Якщо вибрано іншу опцію, перемішує телефони випадковим чином
phones.sort(() => Math.random() - 0.5);
}
// Додає телефони в контейнер в новому порядку
phones.forEach(phone => phoneList.appendChild(phone));
}
// Функція фільтрує телефони по вибраних брендах
function filterPhones() {
// Отримує всі чекбокси в групі фільтрів
const checkboxes = document.querySelectorAll('.filter-group input[type="checkbox"]');
// Створює масив вибраних брендів
const selectedBrands = Array.from(checkboxes)
.filter(checkbox => checkbox.checked) // Фільтрує тільки вибрані чекбокси
.map(checkbox => checkbox.value); // Мапує значення вибраних чекбоксів на масив брендів
// Отримує всі картки телефонів
const phoneCards = document.querySelectorAll('.phone-card');
// Перевіряє кожну картку телефону
phoneCards.forEach(card => {
// Отримує перше слово з назви телефону (бренд)
const brand = card.querySelector('.phone-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('.phone-card');
// Отримує шлях до зображення телефону з атрибуту "data-image"
const imageSrc = card.getAttribute('data-image');
// Отримує назву телефону з елемента ".phone-title"
const title = card.querySelector('.phone-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 при натисканні кнопки
addToCart(this);
});