今天是第四天我們可以寫一個javascript網頁程式管理線上購物系統,現在的人們越來越愛線上購物,因此我想自己寫一個javascript網頁程式管理線上購物系統,以下是程式碼
當然,以下是一個簡單的線上購物管理系統範例,使用 JavaScript、HTML 和 CSS,功能包括:商品列表、加入購物車、計算總金額,以及結帳功能。這個範例展示了基本的購物車操作邏輯,你可以依需求進一步擴展功能。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Online Shopping Management System</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header>
        <h1>線上購物管理系統</h1>
        <div class="cart">
            <span>購物車</span>
            <span id="cart-count">0</span>
        </div>
    </header>
    
    <main>
        <div class="product-list">
            <h2>商品列表</h2>
            <div class="product" data-id="1" data-name="產品A" data-price="100">
                <h3>產品A</h3>
                <p>價格: $100</p>
                <button class="add-to-cart">加入購物車</button>
            </div>
            <div class="product" data-id="2" data-name="產品B" data-price="200">
                <h3>產品B</h3>
                <p>價格: $200</p>
                <button class="add-to-cart">加入購物車</button>
            </div>
            <div class="product" data-id="3" data-name="產品C" data-price="300">
                <h3>產品C</h3>
                <p>價格: $300</p>
                <button class="add-to-cart">加入購物車</button>
            </div>
        </div>
        <div class="cart-details">
            <h2>購物車</h2>
            <ul id="cart-items"></ul>
            <p>總金額: $<span id="total-price">0</span></p>
            <button id="checkout">結帳</button>
        </div>
    </main>
    <script src="script.js"></script>
</body>
</html>
style.css)body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
    background-color: #f4f4f4;
}
header {
    background-color: #333;
    color: white;
    padding: 10px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
h1 {
    margin: 0;
}
.cart {
    background-color: #555;
    padding: 5px 10px;
    border-radius: 5px;
}
main {
    padding: 20px;
    display: flex;
    justify-content: space-between;
}
.product-list, .cart-details {
    width: 45%;
}
.product {
    background-color: #fff;
    padding: 20px;
    margin-bottom: 20px;
    border-radius: 5px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
button {
    background-color: #28a745;
    color: white;
    padding: 10px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}
button:hover {
    background-color: #218838;
}
.cart-details {
    background-color: #fff;
    padding: 20px;
    border-radius: 5px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
#cart-items {
    list-style: none;
    padding: 0;
}
#cart-items li {
    margin-bottom: 10px;
}
script.js)let cart = [];
let totalPrice = 0;
// 更新購物車計數
function updateCartCount() {
    document.getElementById('cart-count').textContent = cart.length;
}
// 更新總價格
function updateTotalPrice() {
    totalPrice = cart.reduce((sum, item) => sum + item.price, 0);
    document.getElementById('total-price').textContent = totalPrice;
}
// 顯示購物車內容
function displayCart() {
    const cartItemsElement = document.getElementById('cart-items');
    cartItemsElement.innerHTML = '';
    cart.forEach(item => {
        const li = document.createElement('li');
        li.textContent = `${item.name} - $${item.price}`;
        cartItemsElement.appendChild(li);
    });
}
// 加入購物車
function addToCart(product) {
    cart.push(product);
    updateCartCount();
    updateTotalPrice();
    displayCart();
}
// 結帳
document.getElementById('checkout').addEventListener('click', () => {
    if (cart.length === 0) {
        alert('購物車是空的');
        return;
    }
    alert(`購物成功!總金額為 $${totalPrice}`);
    cart = [];
    updateCartCount();
    updateTotalPrice();
    displayCart();
});
// 事件監聽器:加入購物車按鈕
document.querySelectorAll('.add-to-cart').forEach(button => {
    button.addEventListener('click', (event) => {
        const productElement = event.target.closest('.product');
        const product = {
            id: productElement.getAttribute('data-id'),
            name: productElement.getAttribute('data-name'),
            price: parseInt(productElement.getAttribute('data-price'), 10),
        };
        addToCart(product);
    });
});
我會主要以javascript來介紹
let cart = [];
let totalPrice = 0;
這兩行代碼初始化了兩個變數:
cart:是一個空的陣列,用來存放所有加入購物車的商品。每個商品都是一個物件(包含商品的 id、name 和 price)。totalPrice:一開始設定為 0,用來儲存購物車內所有商品的總價格。function updateCartCount() {
    document.getElementById('cart-count').textContent = cart.length;
}
這個函數用來更新購物車右上角顯示的商品數量:
cart.length 是購物車中商品的數量。document.getElementById('cart-count') 尋找頁面上的購物車數量顯示區域,然後將 textContent 設定為 cart.length,即購物車中的商品數。function updateTotalPrice() {
    totalPrice = cart.reduce((sum, item) => sum + item.price, 0);
    document.getElementById('total-price').textContent = totalPrice;
}
這個函數計算購物車中所有商品的總價格並顯示出來:
cart.reduce() 是 JavaScript 的一個陣列方法,將購物車中的每個商品的 price 累加起來。sum 是累加值,item.price 是當前商品的價格。totalPrice 設定為計算的結果,並更新到頁面上的總價格區域,這裡使用 document.getElementById('total-price').textContent 設置頁面的總金額顯示。function displayCart() {
    const cartItemsElement = document.getElementById('cart-items');
    cartItemsElement.innerHTML = '';
    cart.forEach(item => {
        const li = document.createElement('li');
        li.textContent = `${item.name} - $${item.price}`;
        cartItemsElement.appendChild(li);
    });
}
這個函數用來顯示購物車內的所有商品:
cart-items),然後將其內容清空 (innerHTML = ''),確保不會重複顯示舊的購物車內容。cart.forEach() 用來迭代購物車內的每個商品,對每個商品創建一個 <li> 元素,並將商品名稱和價格 (item.name 和 item.price) 設為列表項的內容。<li> 元素添加到購物車的列表區域中 (appendChild(li))。function addToCart(product) {
    cart.push(product);
    updateCartCount();
    updateTotalPrice();
    displayCart();
}
這個函數負責將商品加入購物車,並更新相關顯示:
cart.push(product):將傳入的商品物件(product)加入到購物車陣列中。updateCartCount() 更新購物車商品數量、呼叫 updateTotalPrice() 更新總價格,然後呼叫 displayCart() 來更新顯示購物車內容。document.getElementById('checkout').addEventListener('click', () => {
    if (cart.length === 0) {
        alert('購物車是空的');
        return;
    }
    alert(`購物成功!總金額為 $${totalPrice}`);
    cart = [];
    updateCartCount();
    updateTotalPrice();
    displayCart();
});
這段程式碼負責處理當使用者點擊「結帳」按鈕時發生的事件:
addEventListener() 將「結帳」按鈕的點擊事件綁定到一個函數。cart.length === 0),會彈出提示框 (alert('購物車是空的')) 並停止執行(return)。totalPrice)。cart = []),並更新頁面上的顯示(更新購物車數量、總價格和購物車內容)。document.querySelectorAll('.add-to-cart').forEach(button => {
    button.addEventListener('click', (event) => {
        const productElement = event.target.closest('.product');
        const product = {
            id: productElement.getAttribute('data-id'),
            name: productElement.getAttribute('data-name'),
            price: parseInt(productElement.getAttribute('data-price'), 10),
        };
        addToCart(product);
    });
});
這段程式碼會為每個「加入購物車」按鈕綁定點擊事件:
document.querySelectorAll('.add-to-cart') 選取所有 class="add-to-cart" 的按鈕,然後使用 forEach() 來為每個按鈕綁定點擊事件。event.target 是指被點擊的按鈕,closest('.product') 是從按鈕找到最近的父級 .product 元素。productElement 提取商品的 id、name 和 price,並將它們放入一個商品物件(product)中。addToCart(product) 將這個商品加入購物車。這個 JavaScript 程式碼提供了一個基本的購物車系統邏輯,包括商品加入購物車、計算總金額、顯示購物車內容以及結帳功能。每個功能被拆分為單一的函數,當有事件發生時(如點擊加入購物車按鈕或結帳按鈕),這些函數會根據使用者操作進行相應的處理。