177 lines
6.3 KiB
JavaScript
Executable file
177 lines
6.3 KiB
JavaScript
Executable file
//shopping-cart
|
|
let cartIcon = document.querySelector('#cart-icon');
|
|
let cart = document.querySelector('.cart');
|
|
let closeCart = document.querySelector('#close-cart');
|
|
|
|
cartIcon.onclick = () =>{
|
|
cart.classList.add("active");
|
|
};
|
|
closeCart.onclick = () =>{
|
|
cart.classList.remove("active");
|
|
};
|
|
|
|
//-------------------- add/remove items from the cart --------------------
|
|
if (document.readyState == 'loading'){
|
|
document.addEventListener('DOMContentLoaded', ready);
|
|
}
|
|
else{
|
|
ready();
|
|
}
|
|
function ready(){
|
|
//remove item from the cart
|
|
var removeCartBtn = document.getElementsByClassName('cart-remove');
|
|
for(var i = 0; i < removeCartBtn.length; i++){
|
|
var button = removeCartBtn[i];
|
|
button.addEventListener('click', removeCartItem);
|
|
}
|
|
//quantity
|
|
var quantityInput = document.getElementsByClassName('cart-quantity');
|
|
for(var i = 0; i < quantityInput.length; i++){
|
|
var input = quantityInput[i];
|
|
input.addEventListener('change', quantityChange);
|
|
}
|
|
//add cart
|
|
var addCart = document.getElementsByClassName('add-cart');
|
|
for(var i = 0; i < addCart.length; i++){
|
|
var button = addCart[i];
|
|
button.addEventListener('click', addCartClick);
|
|
}
|
|
loadCartItems();
|
|
}
|
|
//remove item
|
|
function removeCartItem(event){
|
|
var buttonClicked = event.target;
|
|
buttonClicked.parentElement.remove();
|
|
updateTotal();
|
|
saveCartItem();
|
|
}
|
|
//quantity change
|
|
function quantityChange(event){
|
|
var input = event.target;
|
|
if(isNaN(input.value) || input.value <= 0){
|
|
input.value = 1;
|
|
}
|
|
updateTotal();
|
|
saveCartItem();
|
|
updateCartIcon();
|
|
}
|
|
//add item to cart
|
|
function addCartClick(event){
|
|
var button = event.target;
|
|
var shopProduct = button.parentElement;
|
|
var title = shopProduct.getElementsByClassName('product-title')[0].innerText;
|
|
var price = shopProduct.getElementsByClassName('price')[0].innerText;
|
|
var productImg = shopProduct.getElementsByClassName('product-img')[0].src;
|
|
addProductToCart(title, price, productImg);
|
|
updateTotal();
|
|
saveCartItem();
|
|
updateCartIcon();
|
|
}
|
|
function addProductToCart(title, price, productImg){
|
|
var cartShopBox = document.createElement('div');
|
|
cartShopBox.classList.add('cart-box');
|
|
var cartItems = document.getElementsByClassName('cart-content')[0];
|
|
var cartItemName = cartItems.getElementsByClassName('cart-product-title');
|
|
for (var i = 0; i < cartItemName.length; i++){
|
|
if (cartItemName[i].innerText == title){
|
|
alert('You have already added this item to your cart');
|
|
return;
|
|
}
|
|
}
|
|
var cartBoxContent = ` <img src= "${productImg}" alt="" class="cart-img"/>
|
|
<div class="detail-box">
|
|
<div class="cart-product-title">${title}</div>
|
|
<div class="cart-price">${price}</div>
|
|
<input type="number" name="" id="" value="1" class="cart-quantity">
|
|
</div>
|
|
<i class='bx bxs-trash cart-remove'></i>`;
|
|
cartShopBox.innerHTML = cartBoxContent;
|
|
cartItems.append(cartShopBox);
|
|
cartShopBox.getElementsByClassName('cart-remove')[0].addEventListener('click', removeCartItem);
|
|
cartShopBox.getElementsByClassName('cart-quantity')[0].addEventListener('change', quantityChange);
|
|
saveCartItem();
|
|
updateCartIcon();
|
|
}
|
|
//price total
|
|
function updateTotal(){
|
|
var cartContent = document.getElementsByClassName('cart-content')[0];
|
|
var cartBoxes = cartContent.getElementsByClassName('cart-box');
|
|
var total =0;
|
|
for(var i = 0; i < cartBoxes.length; i++){
|
|
var cartBox = cartBoxes[i];
|
|
var priceElement = cartBox.getElementsByClassName('cart-price')[0];
|
|
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
|
|
var price = parseFloat(priceElement.innerText.replace('$', ''))
|
|
var quantity = quantityElement.value;
|
|
total += price*quantity;
|
|
}
|
|
total = Math.round(total * 100)/100;
|
|
document.getElementsByClassName('total-price')[0].innerText = '$' + total;
|
|
//save total
|
|
localStorage.setItem('cartTotal', total);
|
|
}
|
|
//item in cart
|
|
function saveCartItem(){
|
|
var cartContent = document.getElementsByClassName('cart-content')[0];
|
|
var cartBoxes = cartContent.getElementsByClassName('cart-box');
|
|
var cartItems = [];
|
|
|
|
for (var i = 0; i < cartBoxes.length; i++){
|
|
cartBox = cartBoxes[i];
|
|
var titleElement = cartBox.getElementsByClassName('cart-product-title')[0];
|
|
var priceElement = cart.getElementsByClassName('cart-price')[0];
|
|
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
|
|
var productImg = cartBox.getElementsByClassName('cart-img')[0].src;
|
|
|
|
var item = {
|
|
title: titleElement.innerText,
|
|
price: priceElement.innerText,
|
|
quantity: quantityElement.value,
|
|
productImg: productImg,
|
|
};
|
|
cartItems.push(item);
|
|
}
|
|
localStorage.setItem('cartItems', JSON.stringify(cartItems));
|
|
}
|
|
//load in cart
|
|
function loadCartItems(){
|
|
var cartItems = localStorage.getItem('cartItems');
|
|
if (cartItems){
|
|
cartItems = JSON.parse(cartItems);
|
|
|
|
for (var i = 0; i < cartItems.length; i++){
|
|
var item = cartItems[i];
|
|
addProductToCart(item.title, item.price, item.productImg);
|
|
|
|
var cartBoxes = document.getElementsByClassName('cart-box');
|
|
var cartBox = cartBoxes[cartBoxes.length - 1];
|
|
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
|
|
quantityElement.value = item.quantity;
|
|
}
|
|
}
|
|
var cartTotal = localStorage.getItem('cartTotal');
|
|
if(cartTotal){
|
|
document.getElementsByClassName('total-price')[0].innerText = '$' + cartTotal;
|
|
}
|
|
updateCartIcon();
|
|
}
|
|
//quantity in cart icon
|
|
function updateCartIcon(){
|
|
var cartBoxes = document.getElementsByClassName('cart-box');
|
|
var quantity = 0;
|
|
|
|
for (var i = 0; i < cartBoxes.length; i++){
|
|
var cartBox = cartBoxes[i];
|
|
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
|
|
quantity += parseInt(quantityElement.value);
|
|
}
|
|
var cartIcon = document.querySelector('#cart-icon');
|
|
cartIcon.setAttribute('data-quantity', quantity);
|
|
}
|
|
//clear cart after making a payment
|
|
function clearCart(){
|
|
var cartContent = document.getElementsByClassName('cart-content')[0];
|
|
cartContent.innerHTML = '';
|
|
updateTotal();
|
|
localStorage.removeItem('cartItems');
|
|
}
|