1 Commits

Author SHA1 Message Date
Juanse Marquez
5513e42fc0 Solución ejercicio 8 2026-06-01 18:48:45 -03:00
9 changed files with 324 additions and 87 deletions

View File

@@ -1,18 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una página con un campo de texto y un botón. Al hacer clic en el botón,
// leer el valor del campo y mostrar en la página el mensaje `"Hola, [nombre]!"`.
// Si el campo está vacío, mostrar en su lugar `"Por favor, ingresá tu nombre."`.
let saludo = document.querySelector("#saludo");
let boton = document.querySelector("#enviar");
let form = document.querySelector("form");
let nombre = document.querySelector("#input-nombre");
form.addEventListener("submit", (e) => {
e.preventDefault();
if (nombre.value.trim() === ""){
saludo.textContent = "Por favor, ingresá tu nombre.";
} else {saludo.textContent = `Hola ${nombre.value}!`}
})

View File

@@ -8,13 +8,6 @@
</head> </head>
<body> <body>
<h1>Ejercicio 1</h1> <h1>Ejercicio 1</h1>
<p>Ingrese su nombre</p>
<form action="">
<label for="input-nombre"></label>
<input type="text" name="input-nombre" id="input-nombre">
<button type="submit" id="enviar-form">ver</button>
</form>
<p id="saludo"></p>
<script src="ejercicio1.js"></script> <script src="ejercicio1.js"></script>
</body> </body>

View File

@@ -1,21 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una página con un campo de texto y un botón "Agregar". Cada vez que se
// haga clic en el botón, agregar el texto del campo como un nuevo ítem en una
// lista `<ul>`. Después de agregar el ítem, limpiar el campo.
// Si el campo está vacío al hacer clic, no agregar nada.
let input = document.querySelector("input") //almacenamos en variables el boton, el input y la lista
let boton = document.querySelector("button");
let lista = document.querySelector("ul")
boton.addEventListener("click", ()=>{ // creamos el listener "click" con la funcion
if (!(input.value.trim() === "")){ // si el input NO ESTÁ vacio, continuamos :
nuevoLi = document.createElement("li"); //creamos el li ,
nuevoLi.textContent = input.value.trim(); // le damos contenido ,
lista.appendChild(nuevoLi); // lo anexamos a la lista ,
input.value = ""; // y vaciamos el input :)
}
})
// fin

View File

@@ -8,13 +8,7 @@
</head> </head>
<body> <body>
<h1>Ejercicio 2</h1> <h1>Ejercicio 2</h1>
<p>escriba un texto para agregar a la lista</p>
<br>
<input type="text" name="input" id="input">
<button id="boton-agregar">Agregar</button>
<br>
<ul>
</ul>
<script src="ejercicio2.js"></script> <script src="ejercicio2.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,15 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una lista con al menos seis ítems de cualquier contenido. Al hacer clic
// en un ítem, agregarle la clase `"seleccionado"`. Al hacer clic de nuevo sobre
// el mismo ítem, quitarle la clase.
// Usar delegación de eventos, incluyendo un solo listener en la lista, no uno por
// ítem.
let lista = document.querySelector("ul");
lista.addEventListener("click", (e)=>{
e.target.classList.toggle("defensor-elegido"); //usamos el toggle para agregar/sacar la clase defensor-elegido
console.log(e.target.classList)
})

View File

@@ -8,15 +8,7 @@
</head> </head>
<body> <body>
<h1>Ejercicio 3</h1> <h1>Ejercicio 3</h1>
<p>Defensores convocados</p>
<ul>
<li class="defensor">Romero</li>
<li class="defensor">Senesi</li>
<li class="defensor">Tagliafico</li>
<li class="defensor">Molina</li>
<li class="defensor">Barco</li>
<li class="defensor">Martinez</li>
</ul>
<script src="ejercicio3.js"></script> <script src="ejercicio3.js"></script>
</body> </body>
</html> </html>

View File

@@ -1 +1,72 @@
// Agregar aquí el código javascript const productos = [
{ nombre: "Teclado", precio: 8500 },
{ nombre: "Mouse", precio: 4200 },
{ nombre: "Monitor", precio: 62000 },
{ nombre: "Auriculares", precio: 11000 },
{ nombre: "Webcam", precio: 15500 }
];
// El carrito es un array de objetos { nombre, precio, cantidad }, que
// inicializamos vacío fuera de las funciones (para que sea global):
const carrito = [];
const listaProductos = document.querySelector("#productos");
function actualizarCarrito() {
const totalParrafo = document.querySelector("#total");
const listaCarrito = document.querySelector("#carrito");
listaCarrito.innerHTML = "";
// Calculamos el total mientras construimos la lista.
let total = 0;
for (const item of carrito) {
const subtotal = item.precio * item.cantidad;
total += subtotal;
const li = document.createElement("li");
li.textContent = `${item.nombre} x${item.cantidad}$${subtotal.toLocaleString()}`;
listaCarrito.appendChild(li);
}
totalParrafo.textContent = `Total: $${total.toLocaleString()}`;
}
function agregarAlCarrito(producto) {
// Buscamos si el producto ya está en el carrito.
const itemExistente = carrito.find(item => item.nombre === producto.nombre);
if (itemExistente) {
// Si ya existe, solo incrementamos la cantidad.
itemExistente.cantidad++;
} else {
// Si no existe, lo agregamos manualmente con cantidad 1,
// copiando las propiedades una por una.
carrito.push({
nombre: producto.nombre,
precio: producto.precio,
cantidad: 1
});
}
actualizarCarrito();
}
// Construimos la lista de productos con un botón por cada uno.
for (const producto of productos) {
const listaProductos = document.querySelector("#productos");
const card = document.createElement("div");
card.className = "product-card";
card.innerHTML = `
<div>
<p class="product-name">${producto.nombre}</p>
<p class="product-price">$${producto.precio.toLocaleString()}</p>
</div>
<button class="btn-add">+ Agregar</button>
`;
card.querySelector(".btn-add").addEventListener("click", () => agregarAlCarrito(producto));
listaProductos.appendChild(card);
}
actualizarCarrito();

View File

@@ -1,2 +1,215 @@
/* Agregar el código CSS necesario para el ejercicio */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: system-ui, sans-serif;
background: #f5f4f0;
color: #1a1a1a;
min-height: 100vh;
padding: 2rem;
}
h1 {
font-size: 1.1rem;
font-weight: 500;
color: #555;
margin-bottom: 1.5rem;
}
.layout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
max-width: 820px;
}
.section-label {
font-size: 0.7rem;
font-weight: 500;
color: #888;
text-transform: uppercase;
letter-spacing: 0.06em;
margin-bottom: 0.75rem;
}
/* ── Productos ── */
.product-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.product-card {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 14px;
background: #fff;
border: 0.5px solid #ddd;
border-radius: 8px;
}
.product-name {
font-size: 0.875rem;
font-weight: 500;
color: #1a1a1a;
}
.product-price {
font-size: 0.75rem;
color: #888;
margin-top: 2px;
}
.btn-add {
display: flex;
align-items: center;
gap: 4px;
padding: 6px 12px;
font-size: 0.75rem;
font-weight: 500;
background: transparent;
border: 0.5px solid #ccc;
border-radius: 6px;
color: #1a1a1a;
cursor: pointer;
transition: background 0.15s;
}
.btn-add:hover { background: #f0efeb; }
/* ── Carrito ── */
.cart-panel {
background: #edecea;
border: 0.5px solid #ddd;
border-radius: 12px;
padding: 1rem 1.25rem;
display: flex;
flex-direction: column;
gap: 10px;
}
.cart-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 18px;
height: 18px;
padding: 0 5px;
background: #fde8e8;
color: #a32d2d;
border-radius: 9px;
font-size: 0.625rem;
font-weight: 500;
margin-left: 4px;
}
.cart-empty {
font-size: 0.8rem;
color: #aaa;
text-align: center;
padding: 1.5rem 0;
}
.cart-items {
display: flex;
flex-direction: column;
gap: 8px;
}
.cart-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
background: #fff;
border: 0.5px solid #ddd;
border-radius: 8px;
}
.cart-item-name {
font-size: 0.8rem;
font-weight: 500;
color: #1a1a1a;
}
.cart-item-sub {
font-size: 0.7rem;
color: #888;
margin-top: 2px;
}
.cart-item-right {
display: flex;
align-items: center;
gap: 10px;
}
.cart-item-total {
font-size: 0.8rem;
font-weight: 500;
color: #1a1a1a;
min-width: 64px;
text-align: right;
}
.qty-controls {
display: flex;
align-items: center;
gap: 4px;
}
.qty-btn {
width: 22px;
height: 22px;
border: 0.5px solid #ccc;
border-radius: 4px;
background: transparent;
color: #1a1a1a;
cursor: pointer;
font-size: 0.875rem;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
}
.qty-btn:hover { background: #f0efeb; }
.qty-val {
font-size: 0.8rem;
font-weight: 500;
min-width: 16px;
text-align: center;
color: #1a1a1a;
}
.divider {
border: none;
border-top: 0.5px solid #ccc;
}
.cart-total {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.cart-total-label {
font-size: 0.8rem;
color: #888;
}
.cart-total-amount {
font-size: 1.25rem;
font-weight: 500;
color: #1a1a1a;
}

View File

@@ -1,13 +1,38 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="es">
<head> <head>
<meta charset="utf-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ejercicio 8</title> <title>Ejercicio 8 — Carrito de compras</title>
<style></style>
<link rel="stylesheet" href="estilo.css"> <link rel="stylesheet" href="estilo.css">
</head> </head>
<body> <body>
<h1>Ejercicio 8</h1>
<h1>Ejercicio 8 — Carrito de compras</h1>
<div class="layout">
<div>
<p class="section-label">Productos</p>
<div class="product-list" id="productos"></div>
</div>
<div class="cart-panel">
<div class="cart-header">
<p class="section-label" style="margin:0">
Carrito
</p>
</div>
<div class="cart-items" id="carrito">
<p class="cart-empty" id="empty-msg">El carrito está vacío.</p>
</div>
<hr class="divider">
<div class="cart-total">
<span class="cart-total-label">Total</span>
<span class="cart-total-amount" id="total">$0</span>
</div>
</div>
</div>
<script src="ejercicio8.js"></script> <script src="ejercicio8.js"></script>
</body> </body>