Saltar al contenido principal
Codigo Heroe
Tarea anterior
JavaScript en el navegador17/19
A la lista de tareas
  1. 1. Conectar un script a la página
  2. 2. El método querySelector: buscar un elemento
  3. 3. El método classList.add: agregar una clase
  4. 4. El método querySelectorAll: buscar varios elementos
  5. 5. Recorrer una colección de elementos
  6. 6. Comprobar la propiedad isAvailable
  7. 7. Comprobar la propiedad isSpecial
  8. 8. La propiedad children: elementos hijos
  9. 9. El método createElement: crear un elemento
  10. 10. La propiedad textContent: contenido de texto
  11. 11. Una función para crear elementos
  12. 12. Simplificar el código con makeElement
  13. 13. La propiedad src: la ruta de la imagen
  14. 14. Una función para crear una tarjeta de producto
  15. 15. Probar la función que crea tarjetas
  16. 16. Usar un objeto de datos
  17. 17. Comprobar la disponibilidad del producto
  18. 18. Mostrar una oferta especial
  19. 19. Usar un arreglo de objetos
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

Comprobar la disponibilidad del producto

Ya usamos tres propiedades de los datos. Sigue la cuarta: isAvailable. Guarda un valor booleano que indica si el producto está disponible: true si lo está y false si está agotado.

Según la disponibilidad, la tarjeta debe tener una de estas dos clases adicionales: product--available o product--unavailable.

Ya resolviste esta tarea en el primer programa. Estos eran los pasos:

  1. crear una variable para guardar el nombre de la clase y asignarle un valor inicial;
  2. comprobar la disponibilidad del producto;
  3. si el producto está agotado, cambiar el valor de la variable;
  4. después de la comprobación, agregar a la tarjeta la clase guardada en la variable.

Después de modificar la función, tenemos que probarla. Cambia isAvailable a false en el objeto de datos. Si todo está bien, cambiará el aspecto de la tarjeta.

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Catálogo | Device</title> <link rel="stylesheet" href="device/setting.css"> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="products"> </ul> <script src="script.js"></script> </body> </html>
CSS
.products { display: flex; flex-wrap: wrap; justify-content: space-between; width: 570px; margin: 20px auto; padding: 0; list-style: none; } .product { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; width: 270px; margin-bottom: 30px; } .product__image { order: -1; width: 270px; height: 380px; margin-bottom: 15px; } .product__title { max-width: 180px; margin: 0; font-weight: 700; font-size: 18px; line-height: 24px; } .product__price { max-width: 80px; margin: 0; text-align: right; font-weight: 300; font-size: 16px; font-variant-numeric: lining-nums; line-height: 27px; } .product--special { order: -1; width: 100%; height: 380px; flex-direction: column; justify-content: flex-start; align-content: space-between; } .product--special .product__title { width: 270px; max-width: 100%; margin-bottom: 10px; font-size: 28px; line-height: 36px; } .product--special .product__price { width: 270px; max-width: 100%; text-align: left; text-decoration: line-through; color: #cccccc; } .product--special .product__special-price { margin: 0; } .product--special .product__image { outline: 3px solid #ffc600; } .product--special::before { content: "Producto del día"; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; padding: 5px 10px; font-weight: 500; color: #111111; text-transform: uppercase; background-color: #ffc600; } .product--available::after, .product--unavailable::after { position: absolute; top: 343px; left: 50%; padding: 10px 5px 2px 5px; border-bottom: 1px solid #57c74b; transform: translateX(-50%); } .product--available::after { content: "Disponible"; } .product--unavailable { filter: grayscale(1) opacity(0.7); } .product--unavailable::after { content: "Agotado"; } .product--special.product--available::after, .product--special.product--unavailable::after { left: 135px; }
JavaScript
var makeElement = function (tagName, className, text) { var element = document.createElement(tagName); element.classList.add(className); if (text) { element.textContent = text; } return element; }; var createCard = function (product) { var listItem = makeElement('li', 'product'); var title = makeElement('h2', 'product__title', product.text); listItem.appendChild(title); var picture = makeElement('img', 'product__image'); picture.src = product.imgUrl; picture.alt = product.text; listItem.appendChild(picture); var price = makeElement('p', 'product__price', product.price); listItem.appendChild(price); return listItem; }; var cardList = document.querySelector('.products'); var productInfo = { isAvailable: true, imgUrl: 'device/item-1.jpg', text: 'Palo para selfies para principiantes', price: 200, isSpecial: false, specialPrice: null }; var cardItem = createCard(productInfo); cardList.appendChild(cardItem);

El código ha cambiado, haz clic en "Actualizar" o activa la ejecución automática.

Ha ido a otra página

Haga clic dentro del mininavegador para poner el foco en esta ventana.

100%
Consola
ObjetivosRealizado
0
    1. En createCard, antes de return, crea la variable availabilityClass con el valor 'product--available'.
    2. Después, agrega una condición que compruebe si el producto está agotado.
    3. Si se cumple, cambia el valor de availabilityClass a 'product--unavailable'.
    4. Después de la condición, agrega a listItem la clase guardada en availabilityClass.
    5. En el objeto productInfo, cambia isAvailable a false.
    Codigo Heroe

    © 2023-2026, codigoheroe.com