首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >前端页面-新鲜采摘,每日直送

前端页面-新鲜采摘,每日直送

作者头像
贺公子之数据科学与艺术
发布2025-12-17 21:13:07
发布2025-12-17 21:13:07
1270
举报

#VibeCoding·九月创作之星挑战赛

本文介绍了一个水果电商网站的HTML代码结构,包含响应式设计、产品展示和购物车功能。网站采用渐变背景的标题栏,使用CSS Grid布局展示产品卡片,每张卡片包含水果图标、名称、价格和描述,并有加入购物车按钮。右侧固定位置显示购物车面板,可查看已选商品及总价。此外还设计了结账模态框,包含表单提交功能。整体设计注重用户体验,包含悬停动画效果和响应式布局,色彩明快突出水果主题。

🍎水果电商 - 新鲜直达

🍓 水果天堂 🍉

新鲜采摘,每日直送

代码语言:javascript
复制
<div class="container">
    <div class="product-grid" id="product-list">
        <!-- 商品将通过 JS 动态插入 -->
    </div>
</div>

<!-- 购物车面板 -->
<div class="cart" id="shopping-cart">
    <div class="cart-header">
        <h3>🛒 我的购物车</h3>
        <button class="btn-close" id="close-cart">×</button>
    </div>
    <div class="cart-items" id="cart-items">
        <!-- 购物车商品项 -->
    </div>
    <div class="cart-total">总计: ¥<span id="cart-total">0.00</span></div>
    <button id="checkout-btn" class="btn-checkout">📦 下单结算</button>
</div>

<!-- 下单模态框 -->
<div class="modal" id="order-modal">
    <div class="modal-content">
        <h2>填写收货信息</h2>
        <form id="order-form">
            <div class="form-group">
                <label for="name">姓名</label>
                <input type="text" id="name" required />
            </div>
            <div class="form-group">
                <label for="phone">电话</label>
                <input type="tel" id="phone" required />
            </div>
            <div class="form-group">
                <label for="address">地址</label>
                <textarea id="address" rows="3" required></textarea>
            </div>
            <div class="form-group">
                <label>订单详情</label>
                <div id="order-summary"></div>
            </div>
            <div class="form-group">
                <strong>总金额: ¥<span id="final-total">0.00</span></strong>
            </div>
            <button type="submit" class="btn-submit">确认下单</button>
            <p id="success-message" class="success-message" style="display:none;">🎉 订单提交成功!我们将尽快为您配送。</p>
        </form>
    </div>
</div>

<script>
    // 水果商品数据
    const products = [
        { id: 1, emoji: '🍎', name: '红富士苹果', price: 12.5, desc: '来自山东的优质红富士,脆甜多汁' },
        { id: 2, emoji: '🍌', name: '进口香蕉', price: 8.8, desc: '厄瓜多尔进口,自然成熟,香甜软糯' },
        { id: 3, emoji: '🍇', name: '阳光玫瑰葡萄', price: 38.0, desc: '日本品种,果粒饱满,清甜无籽' },
        { id: 4, emoji: '🍉', name: '麒麟西瓜', price: 22.0, desc: '沙瓤爆汁,夏日解暑必备' },
        { id: 5, emoji: '🍓', name: '丹东草莓', price: 45.0, desc: '现摘现发,颗颗红润,酸甜可口' },
        { id: 6, emoji: '🍊', name: '赣南脐橙', price: 16.8, desc: '皮薄肉厚,维C满满,自然甘甜' },
        { id: 7, emoji: '🍍', name: '菲律宾凤梨', price: 28.0, desc: '无需泡盐水,直接削皮吃,纤维细腻' },
        { id: 8, emoji: '🥭', name: '台农芒果', price: 32.0, desc: '香气浓郁,果肉金黄,入口即化' }
    ];

    // 购物车数据
    let cart = [];

    // DOM 元素
    const productListEl = document.getElementById('product-list');
    const cartEl = document.getElementById('shopping-cart');
    const cartItemsEl = document.getElementById('cart-items');
    const cartTotalEl = document.getElementById('cart-total');
    const closeCartBtn = document.getElementById('close-cart');
    const checkoutBtn = document.getElementById('checkout-btn');
    const orderModal = document.getElementById('order-modal');
    const orderForm = document.getElementById('order-form');
    const orderSummary = document.getElementById('order-summary');
    const finalTotalEl = document.getElementById('final-total');
    const successMessage = document.getElementById('success-message');

    // 渲染商品列表
    function renderProducts() {
        productListEl.innerHTML = '';
        products.forEach(product => {
            const card = document.createElement('div');
            card.className = 'product-card';
            card.innerHTML = `
                <div class="product-image">${product.emoji}</div>
                <div class="product-info">
                    <h3 class="product-title">${product.name}</h3>
                    <p class="product-desc">${product.desc}</p>
                    <p class="product-price">¥${product.price.toFixed(2)}</p>
                    <button data-id="${product.id}" class="btn-add">加入购物车</button>
                </div>
            `;
            productListEl.appendChild(card);
        });

        // 绑定“加入购物车”按钮事件
        document.querySelectorAll('.btn-add').forEach(btn => {
            btn.addEventListener('click', (e) => {
                const id = parseInt(e.target.dataset.id);
                addToCart(id);
            });
        });
    }

    // 添加商品到购物车
    function addToCart(productId) {
        const product = products.find(p => p.id === productId);
        if (!product) return;

        const existing = cart.find(item => item.id === productId);
        if (existing) {
            existing.quantity += 1;
        } else {
            cart.push({ ...product, quantity: 1 });
        }

        updateCart();
        cartEl.style.display = 'block'; // 显示购物车
    }

    // 更新购物车显示
    function updateCart() {
        cartItemsEl.innerHTML = '';
        let total = 0;

        cart.forEach(item => {
            const itemTotal = item.price * item.quantity;
            total += itemTotal;

            const cartItem = document.createElement('div');
            cartItem.className = 'cart-item';
            cartItem.innerHTML = `
                <span>${item.emoji} ${item.name} × ${item.quantity}</span>
                <span>¥${itemTotal.toFixed(2)}</span>
            `;
            cartItemsEl.appendChild(cartItem);
        });

        cartTotalEl.textContent = total.toFixed(2);
    }

    // 打开下单模态框
    function openOrderModal() {
        orderSummary.innerHTML = cart.map(item =>
            `<div>${item.emoji} ${item.name} × ${item.quantity} = ¥${(item.price * item.quantity).toFixed(2)}</div>`
        ).join('');
        finalTotalEl.textContent = cart.reduce((sum, item) => sum + item.price * item.quantity, 0).toFixed(2);
        orderModal.style.display = 'flex';
    }

    // 关闭模态框
    function closeModal() {
        orderModal.style.display = 'none';
        orderForm.reset();
        successMessage.style.display = 'none';
    }

    // 初始化页面
    function init() {
        renderProducts();

        // 显示/隐藏购物车
        document.addEventListener('click', (e) => {
            if (e.target.id === 'shopping-cart' || e.target.closest('.cart')) {
                cartEl.style.display = 'block';
            } else if (e.target.classList.contains('btn-close') || e.target.id === 'close-cart') {
                cartEl.style.display = 'none';
            }
        });

        // 结算按钮
        checkoutBtn.addEventListener('click', () => {
            if (cart.length === 0) {
                alert('请先添加商品到购物车!');
                return;
            }
            openOrderModal();
        });

        // 表单提交
        orderForm.addEventListener('submit', (e) => {
            e.preventDefault();
            // 这里可以发送订单到服务器
            console.log('订单提交:', {
                customer: {
                    name: document.getElementById('name').value,
                    phone: document.getElementById('phone').value,
                    address: document.getElementById('address').value
                },
                items: cart,
                total: cart.reduce((sum, item) => sum + item.price * item.quantity, 0)
            });

            // 显示成功消息
            successMessage.style.display = 'block';
            orderForm.querySelector('.btn-submit').disabled = true;

            // 重置状态
            setTimeout(() => {
                cart = [];
                updateCart();
                closeModal();
                orderForm.querySelector('.btn-submit').disabled = false;
            }, 2000);
        });

        // 点击模态框外部关闭
        window.addEventListener('click', (e) => {
            if (e.target === orderModal) {
                closeModal();
            }
        });
    }

    // 启动应用
    init();
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🍓 水果天堂 🍉
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档