在现代网页开发中,购物车是电子商务网站的重要功能之一。通过JavaScript,我们可以实现一个响应式动态购物车,提供用户友好的体验,并展示前端开发的核心能力。
案例需求
我们的购物车需要实现以下功能:
- 动态添加商品:用户可以从商品列表中选择并添加商品到购物车。
- 实时更新:购物车的商品数量、价格和总金额自动更新。
- 修改商品数量:用户可以调整购物车中商品的数量。
- 移除商品:用户可以从购物车中移除商品。
- 结算功能:显示总金额并模拟提交订单。
HTML结构
首先,我们构建基本的HTML页面结构,包含商品展示区和购物车。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态购物车</title><link rel="stylesheet" href="styles.css">
</head>
<body><div class="container"><h1>在线商店</h1><div class="product-list"><div class="product" data-id="1" data-price="50"><h2>商品A</h2><p>价格:$50</p><button class="add-to-cart">添加到购物车</button></div><div class="product" data-id="2" data-price="100"><h2>商品B</h2><p>价格:$100</p><button class="add-to-cart">添加到购物车</button></div><div class="product" data-id="3" data-price="150"><h2>商品C</h2><p>价格:$150</p><button class="add-to-cart">添加到购物车</button></div></div><div class="shopping-cart"><h2>购物车</h2><ul id="cart-items"></ul><p id="total-price">总金额:$0</p><button id="checkout">结算</button></div></div><script src="script.js"></script>
</body>
</html>
CSS样式
设计一个简洁的样式,使页面布局清晰且美观。
body {font-family: Arial, sans-serif;margin: 0;padding: 0;background-color: #f8f9fa;color: #333;display: flex;justify-content: center;align-items: center;height: 100vh;
}.container {background: #ffffff;padding: 20px;border-radius: 5px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);display: flex;gap: 20px;
}.product-list, .shopping-cart {width: 50%;
}.product {background: #f1f1f1;padding: 15px;border: 1px solid #ddd;border-radius: 4px;margin-bottom: 10px;
}button {background-color: #007bff;color: #fff;border: none;border-radius: 4px;padding: 10px;cursor: pointer;transition: background-color 0.3s;
}button:hover {background-color: #0056b3;
}#cart-items {list-style: none;padding: 0;
}#cart-items li {display: flex;justify-content: space-between;margin-bottom: 10px;
}#total-price {font-size: 18px;font-weight: bold;
}
JavaScript功能实现
通过JavaScript,我们实现动态交互功能。
javascript">document.addEventListener('DOMContentLoaded', () => {const cartItems = document.getElementById('cart-items');const totalPrice = document.getElementById('total-price');const checkoutButton = document.getElementById('checkout');const addToCartButtons = document.querySelectorAll('.add-to-cart');let cart = [];// 添加商品到购物车addToCartButtons.forEach(button => {button.addEventListener('click', () => {const productElement = button.parentElement;const productId = productElement.getAttribute('data-id');const productName = productElement.querySelector('h2').textContent;const productPrice = parseFloat(productElement.getAttribute('data-price'));const existingProduct = cart.find(item => item.id === productId);if (existingProduct) {existingProduct.quantity += 1;} else {cart.push({ id: productId, name: productName, price: productPrice, quantity: 1 });}updateCartUI();});});// 更新购物车UIfunction updateCartUI() {cartItems.innerHTML = '';let total = 0;cart.forEach(item => {total += item.price * item.quantity;const cartItem = document.createElement('li');cartItem.innerHTML = `${item.name} - $${item.price} x ${item.quantity}<button class="remove-item" data-id="${item.id}">移除</button>`;cartItems.appendChild(cartItem);// 移除商品cartItem.querySelector('.remove-item').addEventListener('click', () => {cart = cart.filter(cartItem => cartItem.id !== item.id);updateCartUI();});});totalPrice.textContent = `总金额:$${total.toFixed(2)}`;}// 模拟结算checkoutButton.addEventListener('click', () => {if (cart.length === 0) {alert('购物车为空!');return;}alert(`订单已提交!总金额:$${cart.reduce((sum, item) => sum + item.price * item.quantity, 0).toFixed(2)}`);cart = [];updateCartUI();});
});
功能演示
- 商品添加:点击“添加到购物车”,商品立即显示在购物车列表中。
- 实时更新:购物车总金额自动更新,无需刷新页面。
- 数量修改:添加相同商品会增加数量。
- 商品移除:点击“移除”按钮即可删除商品。
- 订单提交:点击“结算”按钮,模拟提交订单。
总结
通过本案例,你学习了如何使用HTML、CSS和JavaScript构建一个功能完整的动态购物车。这个案例不仅展示了前端开发的基本技能,还可以作为更复杂的电子商务项目的起点。