Как отрисовать добавить карточки товаров с помощью js или ts? Надо создавать карточки динамически
'use strict'
function app () {
const buttons = document.querySelectorAll ('.button');
const cards = document.querySelectorAll ('.card');
function filter (category, items) {
items.forEach((item) => {
const isItemFiltered = !item.classList.contains (category);
const isShowAll = category.toLowerCase () === 'all';
if (isItemFiltered && !isShowAll) {
item.classList.add ('hide');
} else {
item.classList.remove ('hide');
item.classList.remove ('hidden');
};
});
}
buttons.forEach ((button) => {
button.addEventListener ('click', () => {
const currentCategory = button.dataset.btn;
filter (currentCategory, cards);
});
});
cards.forEach ((card) => {
card.ontransitionend = function () {
if (card.classList.contains ('hide')) {
card.classList.add ('hidden');
}
}
})
}
app ()
body {
font-family: Arial, Helvetica, sans-serif;
}
header {
margin: 0 auto;
padding: 1%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
text-align: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
header .header__title {
display: inline-block;
width: 100%;
margin: 1.5% auto;
font-size: 2.5rem;
letter-spacing: 1.5px;
color: chocolate;
text-shadow: 1px 1px 2px black;
}
header .header__title hr {
width: 100px;
height: 3px;
margin: 10px auto;
background-color: chocolate;
}
header .header__nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
header .header__nav .nav {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
width: 100%;
margin: 0 auto;
-ms-flex-line-pack: center;
align-content: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-column-gap: 40px;
-moz-column-gap: 40px;
column-gap: 40px;
font-size: 1.5rem;
letter-spacing: 1.5px;
color: lightskyblue;
text-shadow: 1px 1px 2px black;
cursor: pointer;
}
header .header__nav .nav li {
width: 200px;
height: 35px;
padding: 5px;
}
header .header__nav .nav li:active {
color: red;
}
header .header__nav .nav li:hover {
text-decoration: underline;
text-shadow: 1px 1px 3px blue;
-webkit-transform: scaleX(1.1);
transform: scaleX(1.1);
display: inline-block;
-webkit-box-shadow: 1px 1px 10px chocolate;
box-shadow: 1px 1px 10px chocolate;
}
.content {
width: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin: 10px;
padding: 10px;
}
.content .card {
min-width: 420px;
min-height: 160px;
margin: 20px;
padding: 10px;
-webkit-transition: all 2s ease-in-out;
transition: all 2s ease-in-out;
}
.content .card:hover {
cursor: pointer;
-webkit-transform: scale(1.02);
transform: scale(1.02);
-webkit-transition: all 0.3s ease;
transition: all 0.3s ease;
-webkit-box-shadow: 1px 1px 10px chocolate;
box-shadow: 1px 1px 10px chocolate;
}
.content .card img {
width: 180px;
-webkit-box-shadow: 1px 1px 1px chocolate;
box-shadow: 1px 1px 1px chocolate;
border: 1px solid chocolate;
border-radius: 10px;
display: inline-block;
}
.content .card .card__body {
display: inline-block;
margin-left: 10px;
width: 200px;
height: 30px;
color: grey;
font-size: 1.1rem;
}
.content .card .card__body .card__top {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
font-weight: bold;
color: chocolate;
}
.content .card .card__body .card__top span:first-child {
color: black;
letter-spacing: 1px;
opacity: 0.6;
font-size: 1.1rem;
}
.content .card .card__body .discription__text {
display: inline-block;
margin-top: 5px;
padding-top: 20px;
width: 200px;
height: 100px;
border-top: 0.5px dotted grey;
font-size: 1.2rem;
letter-spacing: 0.8px;
opacity: 0.8;
}
.hide {
opacity: 0;
-webkit-transform: scale(0);
transform: scale(0);
max-width: 0;
max-height: 0;
margin: 0;
padding: 0;
visibility: hidden;
-webkit-transition: all 0.3s;
transition: all 0.3s;
}
.hidden {
display: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Task 2.2</title>
<link rel="stylesheet" href="./css/null.css">
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<header>
<div class="header__title">
<h1>Our menu</h1>
<hr>
</div>
<nav class="header__nav">
<ul class="nav">
<li data-btn="all" class="all button"><span>All</span></li>
<li data-btn="card__breakfast" class="card__breakfast button"><span>Breakfast</span></li>
<li data-btn="card__lunch" class="card__lunch button"><span>lunch</span></li>
<li data-btn="card__dinner" class="card__dinner button"><span>Dinner</span></li>
<li data-btn="card__shakes" class="card__shakes button"><span>Shakes</span></li>
</ul>
</nav>
</header>
<section class="content">
<div class="card__breakfast card">
<img src="./img/breakfast_1.png" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Breacfast</span>
<span class="prise">$140.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__lunch card">
<img src="./img/lunch_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Lunch</span>
<span class="prise">$180.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__dinner card">
<img src="./img/dinner_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Dinner</span>
<span class="prise">$120.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__shakes card">
<img src="./img/shakes_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Shakes</span>
<span class="prise">$14.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__breakfast card">
<img src="./img/breakfast_1.png" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Breacfast</span>
<span class="prise">$140.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__lunch card">
<img src="./img/lunch_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Lunch</span>
<span class="prise">$180.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__dinner card">
<img src="./img/dinner_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Dinner</span>
<span class="prise">$120.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__shakes card">
<img src="./img/shakes_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Shakes</span>
<span class="prise">$14.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__breakfast card">
<img src="./img/breakfast_1.png" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Breacfast</span>
<span class="prise">$140.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__lunch card">
<img src="./img/lunch_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Lunch</span>
<span class="prise">$180.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__dinner card">
<img src="./img/dinner_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Dinner</span>
<span class="prise">$120.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__shakes card">
<img src="./img/shakes_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Shakes</span>
<span class="prise">$14.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__breakfast card">
<img src="./img/breakfast_1.png" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Breacfast</span>
<span class="prise">$140.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__lunch card">
<img src="./img/lunch_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Lunch</span>
<span class="prise">$180.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__dinner card">
<img src="./img/dinner_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Dinner</span>
<span class="prise">$120.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__shakes card">
<img src="./img/shakes_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Shakes</span>
<span class="prise">$14.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__breakfast card">
<img src="./img/breakfast_1.png" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Breacfast</span>
<span class="prise">$140.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__lunch card">
<img src="./img/lunch_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Lunch</span>
<span class="prise">$180.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__dinner card">
<img src="./img/dinner_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Dinner</span>
<span class="prise">$120.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
<div class="card__shakes card">
<img src="./img/shakes_1.jpg" alt="">
<div class="card__body">
<div class="card__top">
<span class="name">Shakes</span>
<span class="prise">$14.00</span>
</div>
<div class="discription__text">
<span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse</span>
</div>
</div>
</div>
</section>
<script src="./JS/main.js"></script>
</body>
</html>
Ответы (1 шт):
Автор решения: Александр Сычёв
→ Ссылка
Если я правильно понял, то Вам нужно создать например массив объектов, потом его перебрать и сформировать карточку и вывести ее на экран, например так
const menuItem = [
{
'id' : 1,
'header' : 'Breacfast',
'title' : 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse',
'price' : 140,
},
{
'id' : 2,
'header' : 'Breacfast',
'title' : 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse',
'price' : 240,
},
{
'id' : 3,
'header' : 'Lunch',
'title' : 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem nostrum excepturi esse',
'price' : 140,
}
]
let cardItem = ''
let out = document.getElementById('out')
menuItem.forEach ((menu) => {
cardItem +=
`
<div style="border:2px solid #ccc;width: 300px">
<p>${menu.header}</p>
<p>${menu.title}</p>
<p>${menu.price} <span>$</span></p>
<a href="${menu.id}">Перейти</a>
</div>
`
})
out.insertAdjacentHTML('afterbegin', cardItem);
<section class="content" id = "out">
</section>