仿淘宝购物车模块,关键练习js

html代码部分

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">
    <script src="jQuery.min.js"></script>
    <script src="index.js"></script>
</head>

<body>
    <div class="cart-filter-bar">
        <em>全部商品</em>
    </div>
    <!-- 购物车主要核心区域 -->
    <div class="cart-wrap">
        <!-- 头部全选模块 -->
        <div class="cart-thread">
            <div class="t-checkbox">
                <input type="checkbox" class="checkall"> 全选
            </div>
            <div class="t-goods">商品</div>
            <div class="t-price">单价</div>
            <div class="t-num">数量</div>
            <div class="t-sum">小计</div>
            <div class="t-action">操作</div>
        </div>
        <!-- 商品详细模块 -->
        <div class="cart-item-list">
            <div class="cart-item check-cart-item">
                <div class="p-checkbox">
                    <input type="checkbox" name=" " class="j-checkbox">
                </div>
                <div class="p-goods">
                    <div class="p-img">
                        <img src="img.png" alt="">
                    </div>
                    <div class="p-msg">【5本26.8元】经典儿童文学彩图青少版八十天环游地球中学生语文教学大纲</div>
                </div>
                <div class="p-price">¥22.50</div>
                <div class="p-num">
                    <div class="quantity-form"><a href="javascript:;" class="decrement">-</a><input type="text" class="itxt" value="1"><a href="javascript:;" class="increment">+</a></div>
                </div>
                <div class="p-sum">¥22.50</div>
                <div class="p-action"><a href="javascript:;">删除</a></div>
            </div>
            <div class="cart-item check-cart-item">
                <div class="p-checkbox">
                    <input type="checkbox" name=" " class="j-checkbox">
                </div>
                <div class="p-goods">
                    <div class="p-img">
                        <img src="img.png" alt="">
                    </div>
                    <div class="p-msg">【5本26.8元】经典儿童文学彩图青少版八十天环游地球中学生语文教学大纲</div>
                </div>
                <div class="p-price">¥29.80</div>
                <div class="p-num">
                    <div class="quantity-form"><a href="javascript:;" class="decrement">-</a><input type="text" class="itxt" value="1"><a href="javascript:;" class="increment">+</a></div>
                </div>
                <div class="p-sum">¥29.80</div>
                <div class="p-action"><a href="javascript:;">删除</a></div>
            </div>
            <div class="cart-item check-cart-item">
                <div class="p-checkbox">
                    <input type="checkbox" name=" " class="j-checkbox">
                </div>
                <div class="p-goods">
                    <div class="p-img">
                        <img src="img.png" alt="">
                    </div>
                    <div class="p-msg">【5本26.8元】经典儿童文学彩图青少版八十天环游地球中学生语文教学大纲</div>
                </div>
                <div class="p-price">¥19.80</div>
                <div class="p-num">
                    <div class="quantity-form"><a href="javascript:;" class="decrement">-</a><input type="text" class="itxt" value="1"><a href="javascript:;" class="increment">+</a></div>
                </div>
                <div class="p-sum">¥19.80</div>
                <div class="p-action"><a href="javascript:;">删除</a></div>
            </div>
            <div class="cart-item check-cart-item">
                <div class="p-checkbox">
                    <input type="checkbox" name=" " class="j-checkbox">
                </div>
                <div class="p-goods">
                    <div class="p-img">
                        <img src="img.png" alt="">
                    </div>
                    <div class="p-msg">【5本26.8元】经典儿童文学彩图青少版八十天环游地球中学生语文教学大纲</div>
                </div>
                <div class="p-price">¥32.40</div>
                <div class="p-num">
                    <div class="quantity-form"><a href="javascript:;" class="decrement">-</a><input type="text" class="itxt" value="1"><a href="javascript:;" class="increment">+</a></div>
                </div>
                <div class="p-sum">¥32.40</div>
                <div class="p-action"><a href="javascript:;">删除</a></div>
            </div>
            <!-- 结算模块 -->
            <div class="cart-floatbar">
                <div class="select-all">
                    <input type="checkbox" class="checkall">全选
                </div>
                <div class="operation">
                    <a href="javascript:;" class="remove-batch">删除选中的商品</a>
                    <a href="javascript:;" class="clear-all">清理购物车</a>
                </div>
                <div class="toolbar-right">
                    <div class="amout-sum">已选<em> 1 </em>件商品</div>
                    <div class="price-sum">总价: <em>¥12.60</em></div>
                    <div class="btn-area">去结算</div>
                </div>
            </div>
        </div>
    </div>
</body>

</html>

css代码部分

.cart-wrap {
    width: 1225px;
}

.cart-filter-bar {
    font-weight: 500;
    color: #ff0000;
    font-size: 20px;
    width: 80px;
    height: 40px;
    line-height: 50px;
    border-bottom: 1px solid #ff0000;
    text-align: center;
}

em {
    font-style: normal;
}

.cart-thread {
    height: 60px;
    line-height: 60px;
    background-color: #ccc;
    text-align: center;
}

.cart-thread div {
    float: left;
}

.t-checkbox {
    width: 130px;
    text-align: left;
    padding-left: 20px;
}

.t-goods {
    width: 400px;
    text-align: left;
}

.t-price {
    width: 150px;
}

.t-num {
    width: 150px;
}

.t-sum {
    width: 150px;
}

.t-action {
    width: 150px;
}

.cart-item-list {
    width: 1230px;
    background-color: rgb(255, 212, 212);
}

.cart-item-list div {
    float: left;
}

.cart-item {
    width: 1200px;
    padding-left: 20px;
    height: 150px;
    border: 1px solid #ccc;
    border-bottom: 0;
}

.p-checkbox {
    padding-top: 20px;
    width: 50px;
    height: 100px;
}

.p-goods {
    float: left;
    width: 480px;
    height: 150px;
    padding-top: 20px;
}

.p-goods .p-img img {
    width: 100px;
    height: 100px;
}

.p-msg {
    float: left;
    font-size: 12px;
    width: 200px;
    margin-left: 20px;
}

.p-price {
    padding-top: 20px;
    width: 150px;
    text-align: center;
}

.p-num {
    padding-top: 20px;
    width: 152px;
    text-align: center;
}

.p-num a {
    text-decoration: none;
    color: #000;
}

.quantity-form {
    width: 100px;
    margin-left: 24px;
    /* height: 25px; */
    border: 1px solid #000;
    text-align: center;
}

.quantity-form input {
    width: 50px;
    text-align: center;
    border: 0;
    border-left: 1px solid #000;
    border-right: 1px solid #000;
}

.quantity-form a {
    width: 22px;
    display: inline-block;
    text-align: center;
    color: #000;
    background-color: #fff;
}

.p-sum {
    padding-top: 20px;
    width: 150px;
    text-align: center;
}

.p-action {
    padding-top: 20px;
    width: 150px;
    text-align: center;
}

a {
    text-decoration: none;
    color: #000;
}

.cart-floatbar {
    width: 1220px;
    height: 50px;
    line-height: 50px;
    border: 1px solid #000;
}

.select-all {
    width: 100px;
    padding-left: 20px;
}

.operation {
    width: 800px;
    font-size: 12px;
}

.operation a {
    display: inline-block;
    width: 100px;
    text-align: center;
}

.toolbar-right {
    width: 300px;
    height: 50px;
    line-height: 50px;
    font-size: 12px;
}

.amout-sum {
    width: 100px;
}

.amout-sum em {
    color: #dd0000;
    font-weight: 600;
    font-size: 16px;
}

.price-sum {
    width: 120px;
}

.price-sum em {
    color: #dd0000;
    font-weight: 600;
    font-size: 16px;
}

.btn-area {
    width: 80px;
    height: 50px;
    font-size: 16px;
    line-height: 45px;
    color: #fff;
    font-weight: 700;
    background-color: #dd0000;
    text-align: center;
}

.checkbox-item-checked {
    background-color: rgb(255, 218, 218);
}

js代码部分

$(function() {
    // 1.全选全不选模块
    $(".checkall").change(function() {
        $(".j-checkbox,.checkall").prop("checked", $(this).prop("checked"));
        if ($(this).prop("checked")) {
            $(".cart-item").addClass("checkbox-item-checked");
        } else {
            $(".cart-item").removeClass("checkbox-item-checked");
        }
        getsum();
    });

    // 2.如果有一个复选框全被选中,则全选
    $(".j-checkbox").change(function() {
        if ($(".j-checkbox:checked").length === $(".j-checkbox").length) {
            $(".checkall").prop("checked", true);
        } else {
            $(".checkall").prop("checked", false);
        }
        if ($(this).prop("checked")) {
            $(this).parents(".cart-item").addClass("checkbox-item-checked");
        } else {
            $(this).parents(".cart-item").removeClass("checkbox-item-checked");
        }
        getsum();
    });

    // 3. (1) 点击增加商品数量,总价随之增加
    $(".increment").click(function() {
        // 获取当前商品数量
        var n = $(this).siblings(".itxt").val();
        n++;
        $(this).siblings(".itxt").val(n);
        // 获取当前商品单价p
        var p = $(this).parents(".p-num").siblings(".p-price").html().substr(1);
        // 添加商品总价
        $(this).parents(".p-num").siblings(".p-sum").html("¥" + (p * n).toFixed(2));
        // console.log(p);
        getsum();
    });
    // 3. (2) 点击减少商品数量,总价随之减少
    $(".decrement").click(function() {
        // 获取当前商品数量
        var n = $(this).siblings(".itxt").val();
        if (n <= 1) {
            return false;
        }
        n--;
        $(this).siblings(".itxt").val(n);
        // 获取当前商品单价p
        var p = $(this).parents(".p-num").siblings(".p-price").html().substr(1);
        // 添加商品总价
        $(this).parents(".p-num").siblings(".p-sum").html("¥" + (p * n).toFixed(2));
        // console.log(p);
        getsum();
    });
    getsum();
    // 4. 计算商品总数量以及总价钱
    function getsum() {
        var count = 0;
        var money = 0;
        // 想加个限制条件,如果小复选框选中,才计算总数值
        // if ($(".j-checkbox").prop("checked")) {
        $(".itxt").each(function(i, ele) {
            if ($(".itxt").eq(i).parents(".p-num").siblings(".p-checkbox").children(".j-checkbox").prop("checked")) {
                count += parseInt($(ele).val());
            }
        })
        $(".amout-sum em").text(count);
        $(".p-sum").each(function(i, ele) {
            if ($(".p-sum").eq(i).siblings(".p-checkbox").children(".j-checkbox").prop("checked")) {
                money += parseFloat($(ele).text().substr(1));
            }
        })
        $(".price-sum em").html("¥" + money.toFixed(2));
    };
    // 删除商品操作
    // 1. 单独删除每个商品
    $(".p-action").click(function() {
        $(this).parent(".cart-item").remove();
        getsum();
    });
    // 2. 点击下面删除选中的商品
    $(".remove-batch").click(function() {
        $(".j-checkbox:checked").parents(".cart-item").remove();
        getsum();
    });
    // 3. 清理购物车 把购物车中的所有商品移除
    $(".clear-all").click(function() {
        $(".cart-item").remove();
        getsum();
    });
})

说明:在pink老师教学的基础上,增加了对小复选框的判断,只有被选中的小复选框才会被计算数量及总价。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值