I have a school assignment I need to finish this week. I have been trying to make it work for too long now, I hope someone here can help me.
This is the JS
let carts = document.querySelectorAll('.shop-item-button');
let products = [
{
name: "News Of The World",
tag: "https://platenzaak.nl/cdn/shop/products/0602547202727-3000px-001_1024x1024.jpg?v=1648045523",
price: 19.99,
inCart: 0
},
{
name: "My Beautiful Dark Twisted Fantasy",
tag: "0060252747446_600.jpg",
price: 49.99,
inCart: 0
},
{
name: "The Queen Is Dead",
tag: "TheSmiths_TheQueenisDead_1986.jpg",
price: 129.99,
inCart: 0
},
{
name: "to hell with it",
tag: "71VB7dPvb5L._UF894,1000_QL80_.jpg",
price: 39.99,
inCart: 0
},
{
name: "Golden Wind",
tag: "goldenwindJOJO_LP_Packshot_Vinyl_Wide-1024x1024.jpg",
price: 199.99,
inCart: 0
},
{
name: "Fryslan",
tag: "Joost-Fryslan.jpg",
price: 19.99,
inCart: 0
},
{
name: "Voulez Vous",
tag: "ABBA+Voulez-Vous+Album+Cover.jpg",
price: 9.99,
inCart: 0
},
{
name: "OK Computer",
tag: "n2xk6sww98nb1.jpg",
price: 15.99,
inCart: 0
}
];
for(let i=0; i< carts.length; i++) {
carts[i].addEventListener('click', () => {
cartNumbers(products[i]);
totalCost(products[i]);
});
}
function onLoadCartNumbers() {
let productNumbers = localStorage.getItem('cartNumbers');
if( productNumbers ) {
document.querySelector('.cart span').textContent = productNumbers;
}
}
function cartNumbers(product, action) {
let productNumbers = localStorage.getItem('cartNumbers');
productNumbers = parseInt(productNumbers);
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
if( action ) {
localStorage.setItem("cartNumbers", productNumbers - 1);
document.querySelector('.cart span').textContent = productNumbers - 1;
console.log("action running");
} else if( productNumbers ) {
localStorage.setItem("cartNumbers", productNumbers + 1);
document.querySelector('.cart span').textContent = productNumbers + 1;
} else {
localStorage.setItem("cartNumbers", 1);
document.querySelector('.cart span').textContent = 1;
}
setItems(product);
}
function setItems(product) {
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
if(cartItems != null) {
let currentProduct = product.tag;
if( cartItems[currentProduct] == undefined ) {
cartItems = {
...cartItems,
[currentProduct]: product
}
}
cartItems[currentProduct].inCart += 1;
} else {
product.inCart = 1;
cartItems = {
[product.tag]: product
};
}
localStorage.setItem('productsInCart', JSON.stringify(cartItems));
}
function totalCost( product, action ) {
let cart = localStorage.getItem("cart-total");
if( action) {
cart = parseInt(cart);
localStorage.setItem("cart-total", cart - product.price);
} else if(cart != null) {
cart = parseInt(cart);
localStorage.setItem("cart-total", cart + product.price);
} else {
localStorage.setItem("cart-total", product.price);
}
}
function displayCart() {
let cartItems = localStorage.getItem('productsInCart');
cartItems = JSON.parse(cartItems);
let cart = localStorage.getItem("cart-total");
cart = parseInt(cart);
let productContainer = document.querySelector('.products');
if( cartItems && productContainer ) {
productContainer.innerHTML = '';
Object.values(cartItems).map( (item, index) => {
productContainer.innerHTML +=
`<div class="product">
<img src="${item.tag}" /><br><br>
<span class="sm-hide">${item.name}</span>
</div>
<div class="price sm-hide">€ ${item.price},00</div>
<div class="quantity">
<span>${item.inCart}</span>
</div>
<div class="total">€ ${item.inCart * item.price},00</div>`;
});
productContainer.innerHTML += `
<div class="basketTotalContainer">
<h4 class="basketTotalTitle">Totaal</h4>
<h4 class="basketTotal">€ ${cart},00</h4>
</div>`
deleteButtons();
manageQuantity();
}
}
onLoadCartNumbers();
displayCart();
And I have 2 html pages
One for the products
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>UitJePlaat</title>
<script src="https://kit.fontawesome.com/3d96a1bf4e.js" crossorigin="anonymous"></script>
<link rel="icon" href="record-vinyl-solid.svg" type="image/x-icon">
<script src="main.js" async></script>
</head>
<body>
<nav class="navbar">
<ul>
<li><a href="Index.html"><i class="fa-solid fa-record-vinyl"> </i>UitJePlaat</a> </li>
<li><a href="Producten.html">Producten</a></li>
<li><a href="Artiesten.html">Artiesten</a></li>
<li><a href="Overons.html">Over ons</a> </li>
<li><a href="Contact.html">Contact</a> </li>
<li><a href="Winkelwagen.html"><i class="fa-solid fa-cart-shopping"></i><span>0</span></a></li>
</ul>
<h1 class="producten">Producten <br></h1>
<main>
<br>
<section class="sec">
<div class="products">
<div class="card">
<div class="img">
<img class = "shop-item-image" src="https://platenzaak.nl/cdn/shop/products/0602547202727-3000px-001_1024x1024.jpg?v=1648045523" alt="News Of The World By Queen"></div>
<audio controls id="wewillrockyou1" preload="auto"><source src="we.mp3"></audio>
<div class="desc">News Of The World</div>
<div class="title">Queen</div>
<div class="box">
<div class="price">€19,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="0060252747446_600.jpg" alt="Runaway By Kanye West"></div>
<audio controls id="wewillrockyou2" preload="auto"><source src="runn.mp3"></audio>
<div class="desc">My Beautiful Dark Twisted Fantasy </div>
<div class="title">Kanye West</div>
<div class="box">
<div class="price">€49,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="TheSmiths_TheQueenisDead_1986.jpg" alt="There Is A Light That Never Goes Out by The Smiths"></div>
<audio controls id="wewillrockyou3" preload="auto"><source src="There.mp3"></audio>
<div class="desc">The Queen Is Dead</div>
<div class="title">The Smiths</div>
<div class="box">
<div class="price">€129,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="71VB7dPvb5L._UF894,1000_QL80_.jpg" alt="to hell with it by PinkPantheress"></div>
<audio controls id="wewillrockyou4" preload="auto"><source src="PinkPantheress.mp3"></audio>
<div class="desc">to hell with it</div>
<div class="title">PinkPantheress</div>
<div class="box">
<div class="price">€39,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="JOJO_LP_Packshot_Vinyl_Wide-1024x1024.jpg" alt="JOJO's"></div>
<audio controls id="wewillrockyou5" preload="auto"><source src="JOJO.mp3"></audio>
<div class="desc">Golden Wind</div>
<div class="title">JOJO'S</div>
<div class="box">
<div class="price">€199,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="Joost-Fryslan.jpg" alt="Joost-Fryslan"></div>
<audio controls id="wewillrockyou6" preload="auto"><source src="fryslan.mp3"></audio>
<div class="desc">Fryslan</div>
<div class="title">Joost</div>
<div class="box">
<div class="price">€19,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="ABBA+Voulez-Vous+Album+Cover.jpg" alt="Voulez Vous by ABBA"></div>
<audio controls id="wewillrockyou7" preload="auto"><source src="ABBA.mp3"></audio>
<div class="desc">Voulez Vous</div>
<div class="title">ABBA</div>
<div class="box">
<div class="price">€9,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
<div class="card">
<div class="img"><img class = "shop-item-image" src="n2xk6sww98nb1.jpg" alt="OK Computer by Radiohead"></div>
<audio controls id="wewillrockyou8" preload="auto"><source src="Radiohead_-_No_Surprises.mp3"></audio>
<div class="desc">OK Computer</div>
<div class="title">Radiohead</div>
<div class="box">
<div class="price">€15,99</div>
<button class="shop-item-button">In Winkelmandje</button>
</div>
</div>
</div>
</section>
</main>
</body>
</html>
And one for the shopping cart
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>UitJePlaat</title>
<script src="https://kit.fontawesome.com/3d96a1bf4e.js" crossorigin="anonymous"></script>
<link rel="icon" href="record-vinyl-solid.svg" type="image/x-icon">
<script src="main.js" async></script>
</head>
<body>
<nav class="navbar">
<ul>
<li><a href="Index.html"><i class="fa-solid fa-record-vinyl"> </i>UitJePlaat</a> </li>
<li><a href="Producten.html">Producten</a></li>
<li><a href="Artiesten.html">Artiesten</a></li>
<li><a href="Overons.html">Over ons</a> </li>
<li><a href="Contact.html">Contact</a> </li>
<li><a href="Winkelwagen.html"><i class="fa-solid fa-cart-shopping"></i><span class="cart">0</span></a></li>
</ul>
</nav>
<section class="container content-section">
<div class="container">
<div class="container-products"><h1>Winkelwagen</h1>
<div class="product-header">
<h5 class="product-title">Produkt</h5>
<h5 class="price sm-hide">Prijs</h5>
<h5 class="quantity">Hoeveelheid</h5>
<h5 class="total">Totaal</h5>
</div>
<div class="products">
<a href="Betalen.html"><button style="position: relative; margin: auto; width: 200px; text-align: center;">Afrekenen</button></a>
</div>
</div>
</body>
</html>
I’m very sorry for the mess, and I know it’s a lot of code. It would mean the world to me if someone could take the time to help me.
I tried to combine this code https://www.youtube.com/watch?v=YeFzkC2awTM&t=2252s with the code my school provided, but it did not help.