-
Notifications
You must be signed in to change notification settings - Fork 1
/
script.js
377 lines (243 loc) · 10.1 KB
/
script.js
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
console.log("Bienvenido a PetShop Web")
// Navbar
document.addEventListener("DOMContentLoaded", function () {
var links = document.querySelectorAll("nav a");
var navbar = document.querySelector("nav");
links.forEach(function (link) {
link.addEventListener("click", function (event) {
var targetId = link.getAttribute("href");
var targetElement;
if (targetId.startsWith("#")) {
event.preventDefault(); // Evitar que se ejecute la acción predeterminada del enlace
targetElement = document.getElementById(targetId.substring(1));
} else {
// Si el href no comienza con '#', abre el enlace normalmente
return;
}
if (targetElement) {
var navbarHeight = navbar.offsetHeight; // Obtener la altura del navbar
var offset = targetElement.offsetTop - navbarHeight;
window.scrollTo({
top: offset,
behavior: "smooth"
});
}
});
});
});
// BUSCADOR INICIO
document.getElementById('botonBuscar').addEventListener('click', function () {
var resultados = document.getElementById('resultados');
var encontrados = false;
resultados.innerHTML = '';
if (!encontrados) {
resultado = document.createElement('div');
resultado.textContent = 'No se encontraron productos con ese nombre';
resultado.style.color = 'red';
resultados.appendChild(resultado);
}
});
/* VISUALISACION PREVIA DEL PRODUCTOS */
// Función para cargar los productos desde el JSON utilizando fetch
function cargarProductos() {
return fetch('productos.json')
.then(response => {
if (!response.ok) {
throw new Error('Error al cargar los productos');
}
return response.json();
});
}
var carritoProductos = [];
if (carritoProductos.length > 0) {
localStorage.setItem("carritoProductos", JSON.stringify(carritoProductos));
} else {
// Obtener los elementos del almacenamiento local
var localStorageItems = JSON.parse(localStorage.getItem("carritoProductos"));
// Verificar si hay elementos en el almacenamiento local
if (localStorageItems && localStorageItems.length > 0) {
// Establecer el contador del carrito en la longitud de los elementos del almacenamiento local
var contadorSpan = document.querySelector(".contador");
contadorSpan.textContent = localStorageItems.length.toString();
} else {
// Si no hay elementos en el almacenamiento local, establecer el contador del carrito en 0
var contadorSpan = document.querySelector(".contador");
contadorSpan.textContent = "0";
}
}
// Almacenar una referencia a la función de manejo de clic
function agregarAlCarrito(idProducto) {
console.log("Boton presionado");
var contador = document.querySelector(".contador");
var valorActual = parseInt(contador.innerText);
valorActual++;
contador.innerText = valorActual;
// Recuperar el array de productos del localStorage
var carritoProductos = JSON.parse(localStorage.getItem("carritoProductos")) || [];
if (idProducto instanceof PointerEvent) {
carritoProductos.push(idProducto.currentTarget.dataset.id);
} else {
console.log(idProducto)
carritoProductos.push(idProducto);
}
localStorage.setItem("carritoProductos", JSON.stringify(carritoProductos));
console.log("Producto agregado al carrito. ID:", idProducto);
}
// Función para eliminar los event listeners anteriores
function limpiarEventListeners() {
var botones = document.querySelectorAll(".addCarrito");
botones.forEach(function (boton) {
boton.removeEventListener("click", agregarAlCarrito);
});
}
// Agregar event listeners inicialmente
limpiarEventListeners();
var botones = document.querySelectorAll(".addCarrito");
botones.forEach(function (boton) {
boton.addEventListener("click", function () {
// Obtener el ID del producto del atributo data-id
var idProducto = boton.getAttribute("data-id");
agregarAlCarrito(idProducto);
});
});
// Movimiento de tarjetasOfertas
document.addEventListener('DOMContentLoaded', function () {
const btnIzquierda = document.getElementById('btn-izq');
const btnDerecha = document.getElementById('btn-der');
const tarjetas = document.querySelectorAll('.tarjetaOfertas');
btnDerecha.addEventListener('click', () => {
const contenedor = document.querySelector('#productosOferta > div');
const primerElemento = contenedor.firstElementChild;
contenedor.appendChild(primerElemento);
})
btnIzquierda.addEventListener("click", () => {
const contenedor = document.querySelector('#productosOferta > div');
const ultimoElemento = contenedor.lastElementChild;
contenedor.insertBefore(ultimoElemento, contenedor.firstElementChild);
})
})
//Traer productos del backend y crear grid en frontend
const url = ' https://edudev.alwaysdata.net/petshopAPI/'
// const url = 'http://localhost:3000/'
let productos = [];
// Fetch para obtener las categorías y los productos
fetch(`${url}categorias`)
.then(response => response.json())
.then(categorias => {
llenarCategorias(categorias);
return fetch(`${url}productos`);
})
.then(response => response.json())
.then(data => {
productos = data;
mostrarDatos(productos);
})
.catch(error => console.log(error));
// Función para llenar el select de categorías
const llenarCategorias = (categorias) => {
const categoryFilter = document.getElementById('categoryFilter');
categorias.forEach(categoria => {
const option = document.createElement('option');
option.value = categoria.id;
option.textContent = categoria.nombre;
categoryFilter.appendChild(option);
});
};
// Event Listener para el filtro de categorías
document.getElementById('categoryFilter').addEventListener('change', (event) => {
const selectedCategory = event.target.value;
const filteredProducts = selectedCategory === 'all'
? productos
: productos.filter(producto => producto.categoria_id == selectedCategory); // Compara con categoria_id
mostrarDatos(filteredProducts);
});
// Función para mostrar los datos de los productos
const mostrarDatos = (data) => {
let html = '';
data.forEach(producto => {
html += `
<div class="producto " >
<div class="img_producto previsual" data-id="${producto.id}" >
<div class="oferta">
<p>${producto.descripcion}</p>
</div>
<div>
<img src="${producto.imagen}" alt="Producto ${producto.id}">
</div>
</div>
<div class="detalles">
<hr>
<h3>${producto.nombre}</h3>
<p><strong>$${producto.precio}</strong></p>
<button class="addCarrito" data-id="${producto.id}">Agregar al carrito</button>
</div>
</div>
`;
});
document.querySelector('.productos').innerHTML = html;
// Agregar event listeners a los elementos .img_producto después de actualizar el HTML
document.querySelectorAll('.img_producto').forEach(imgProducto => {
imgProducto.addEventListener('click', abrir);
});
};
// Abrir ventana de producto
function abrir(event) {
const productoId = event.currentTarget.getAttribute("data-id");
cargarProductos()
.then(productos => {
const producto = productos.find(item => item.id === parseInt(productoId));
const htmlContent = `
<div class="ventana">
<div class="imagen">
<img src="./img/productos/${producto.imagen}.webp" alt="Imagen del producto">
</div>
<div class="detalles">
<h2>${producto.nombre}</h2>
<p>Categoria: ${producto.detalles.categoria}</p>
<p>Peso: ${producto.detalles.peso} Kg</p>
<p>Precio:$${producto.detalles.precio}</p>
<p>${producto.detalles.descripcion}</p>
<button class="addCarrito" data-id="${producto.id}">Agregar al carrito</button>
</div>
</div>
`;
const fondoPrevia = document.getElementById("Vista-previa");
const vistaPrevia = document.getElementById("Vista-previa");
vistaPrevia.innerHTML = htmlContent;
vistaPrevia.style.display = "block";
fondoPrevia.previousElementSibling.style.display = "block"
// Limpiar event listeners anteriores antes de agregar nuevos
limpiarEventListeners();
var botones = document.querySelectorAll(".addCarrito");
botones.forEach(function (boton) {
boton.addEventListener("click", agregarAlCarrito);
});
})
.catch(error => console.error(error));
}
// Cerrar la ventana producto
function cerrar(event) {
const vistaPrevia = document.getElementById("Vista-previa");
const fondoPrevio = document.getElementById('fondo-vista-previa');
if (!vistaPrevia.contains(event.target)) {
vistaPrevia.style.display = "none";
fondoPrevio.style.display = 'none';
}
}
document.addEventListener("click", cerrar);
// MisterEgg
var secuenciaDeseada = ['ArrowUp', 'ArrowRight', 'ArrowRight', 'ArrowUp', 'ArrowLeft'];
var teclasPresionadas = [];
console.log("Para ver los integrantes Truquito de PC : '↑', '→', '→', '↑', '←' ")
function verificarSecuencia() {
if (teclasPresionadas.length === secuenciaDeseada.length) {
if (teclasPresionadas.every((tecla, indice) => tecla === secuenciaDeseada[indice])) {
window.location.href = 'integrantes.html';
}
teclasPresionadas = [];
}
}
document.addEventListener('keydown', function (event) {
teclasPresionadas.push(event.key);
verificarSecuencia();
});