Saltar al contenido principal
Codigo Heroe
Tarea anterior
JavaScript en el navegador18/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

Mostrar una oferta especial

Solo falta usar las dos últimas propiedades: isSpecial y specialPrice. isSpecial contiene true si el producto tiene una oferta especial. Su nuevo precio se guarda en specialPrice.

Ya resolviste algo parecido: las tarjetas en oferta deben tener la clase adicional product--special. Pero ahora también mostraremos el precio especial. Debe aparecer en un párrafo con la clase product__special-price, al final de los elementos hijos de la tarjeta.

Estos son los pasos:

  1. comprobar si el producto tiene una oferta especial;
  2. si la tiene, agregar la clase a la tarjeta;
  3. y agregar dentro de la tarjeta un párrafo con la clase correspondiente y el texto de la propiedad specialPrice.

Después volveremos a probar la función. En el objeto de datos, cambia isSpecial a true y specialPrice a 300. El valor null significa «nada» o, en este caso, «no hay precio especial». Si todo está bien, cambiará el aspecto de la tarjeta.

¿Por qué el precio pasó de 200 a 300? Porque así entiende las ofertas especiales Cupcake, todo un experto en marketing.

  • 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); var availabilityClass = 'product--available'; if (!product.isAvailable) { availabilityClass = 'product--unavailable'; } listItem.classList.add(availabilityClass); 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, agrega una condición que compruebe si el producto tiene una oferta especial.
    2. Si se cumple, agrega a la tarjeta la clase product--special.
    3. Debajo, dentro de la condición, crea la variable specialPrice. Guarda en ella un párrafo creado con makeElement, con la clase product__special-price y el precio especial del producto.
    4. Debajo, dentro de la condición, agrega specialPrice al final de listItem.
    5. En el objeto productInfo, cambia isSpecial a true y specialPrice a 300.
    Codigo Heroe

    © 2023-2026, codigoheroe.com