以下是一个基本的 JS 购物车实现:
由于是实现基本的功能,就不弄得多复杂了,代码可以直接Ctrl+c/v,大家可以试一试!
HTML:
<div>
<h2>产品列表</h2>
<ul id="productList">
<li data-id="1">
<h3>商品1</h3>
<p>价格:10元</p>
<button class="add-to-cart">添加至购物车</button>
</li>
<li data-id="2">
<h3>商品2</h3>
<p>价格:20元</p>
<button class="add-to-cart">添加至购物车</button>
</li>
<li data-id="3">
<h3>商品3</h3>
<p>价格:30元</p>
<button class="add-to-cart">添加至购物车</button>
</li>
</ul>
</div>
<div>
<h2>购物车</h2>
<ul id="cart">
</ul>
<p id="totalAmount">总金额:0元</p>
<button id="checkout">结算</button>
</div>
JS:
const productList = document.getElementById('productList');
const cart = document.getElementById('cart');
const totalAmount = document.getElementById('totalAmount');
const checkoutBtn = document.getElementById('checkout');
const cartItems = {};
// 添加至购物车事件
productList.addEventListener('click', (event) => {
if (event.target.classList.contains('add-to-cart')) {
const product = event.target.parentElement;
const productId = product.getAttribute('data-id');
const productName = product.querySelector('h3').textContent;
const productPrice = product.querySelector('p').textContent;
addItemToCart(productId, productName, productPrice);
}
});
// 添加物品至购物车
function addItemToCart(id, name, price) {
if (cartItems[id]) {
cartItems[id].count++;
updateCartItem(cartItems[id]);
} else {
const item = { id, name, price, count: 1 };
cartItems[id] = item;
addCartItem(item);
}
updateTotalAmount();
}
// 添加购物车物品
function addCartItem(item) {
const li = document.createElement('li');
li.setAttribute('data-id', item.id);
li.innerHTML = `
<span>${item.name}</span>
<span>${item.price}</span>
<span>${item.count}</span>
<button class="remove-item">删除</button>
`;
cart.appendChild(li);
}
// 更新购物车物品数量
function updateCartItem(item) {
const cartItem = cart.querySelector(`[data-id="${item.id}"]`);
cartItem.querySelector('span:nth-of-type(3)').textContent = item.count;
}
// 删除购物车物品事件
cart.addEventListener('click', (event) => {
if (event.target.classList.contains('remove-item')) {
const item = event.target.parentElement;
const itemId = item.getAttribute('data-id');
delete cartItems[itemId];
item.remove();
updateTotalAmount();
}
});
// 计算总计
function updateTotalAmount() {
const amount = Object.values(cartItems)
.reduce((sum, item) => sum + item.price * item.count, 0);
totalAmount.textContent = `总金额:${amount}元`;
}
// 结算事件
checkoutBtn.addEventListener('click', () => {
alert('结算成功!');
cart.innerHTML = '';
totalAmount.textContent = '总金额:0元';
cartItems = {};
});
这个简单的购物车实现使用了一个对象 cartItems
作为购物车中的物品,它的键是产品 ID,值是包含产品信息的对象。添加至购物车时,首先检查 cartItems
中是否已经有该产品,有的话数量加一并更新,没有则创建一个新对象并添加到购物车列表中。同时,每次添加或删除购物车物品后都需要更新购物车总计。最后,点击结算按钮后将购物车清空并重置总金额。