品优购综合案例——购物车(JQ实现11个效果+Html+Css)之自学系列

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/base.css">
    <link rel="stylesheet" href="css/shopcar.css">
    <style>
        .turnred{
            font-size: 16px;
            color: #E2231A;
            font-weight: 700;
        }
    </style>
</head>
<body>
    
        <!-- 顶部快捷导航 start -->
        <div class="shortcut">
            <div class="w">
                <div class="short-l fl">   
                    <ul>
                        <li><a href="#">品优购欢迎您!</a></li> 
                        <li>
                            <a href="#">请登录  </a>
                            <a href="" class="style-red">免费注册</a>
                        </li>
                    </ul>
                 </div>
                <div class="short-r fr">
                    <ul> 
                        <!-- 由于li内字数不一样,不要给宽度 -->
                        <li>
                            <a href="">我的订单</a>
                            <span class="sx">|</span>
                        </li>
                        <li class="spacer">
                            <a href="">我的品优购</a>
                            <i class="icomoon1"></i>
                            <span class="sx">|</span>
                        </li>
                        <li>
                            <a href="">品优购会员</a>
                            <span class="sx">|</span>
                        </li>
                        <li>
                            <a href="">企业采购</a>
                            <span class="sx">|</span>
                        </li>
                        <li class="spacer">
                            <a href="">关注品优购</a>
                            <i class="icomoon1"></i>
                            <span class="sx">|</span>
                        </li>
                        <li class="spacer">
                            <a href="">客户服务</a>
                            <i class="icomoon1"></i>
                            <span class="sx">|</span>
                        </li>
                        <li class="spacer">
                            <a href="">网站导航</a>
                            <i class="icomoon1"></i>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        <!-- 顶部快捷导航 end -->

            <!-- header部分 start -->
            <div class="headerwai">
                <div class="w">
                    <div class="header">  
                        <!-- logo模块 -->
                        <div class="logo">
                            <!-- 对logo进行优化 -->
                            <h1> <a href="index.html" title="品优购"><!--  背景图片在这里 -->品优购</a></h1>
                        </div>
                        <div class="shopcar-gwc">购物车</div>
                    </div>
            </div>
                <!-- header部分 end -->

        <div class="w">
            <div class="big-concent">
                <div class="cart-filter-bar"><span>全部商品</span> </div>
                <div class="cart-thead">
                    <div class="t-checkbox fl"> <input type="checkbox" class="checkall">全选</div>
                    <div class="t-goods fl"><span>商品</span></div>
                    <div class="t-price fl"><span>单价</span></div>
                    <div class="t-num fl"><span>数量</span></div>
                    <div class="t-sum fl"><span>小计</span></div>
                    <div class="t-action fl"><span>操作</span></div>
                </div>
                <div class="cart-item-list">
                    <div class="cart-item check-cart-item">
                        <div class="p-checkbox fl"> <input type="checkbox" checked='checked' class="j-checkbox"></div>
                        <div class="p-goods fl" > 
                            <div class="p-goods-hd fl">
                                <img src="img/p1.jpg" alt="">
                            </div>
                            <div class="p-goods-bd fl">【5本26.8元】经典儿童文学彩图青少 <br> 版八十天环游地球中学生语文教学大纲</div>
                        </div>
                        <div class="p-price fl">¥12.60</div>
                        <div class="p-num fl">
                                <a href="javascript:;" class="decrement">-</a>
                                <input type="text" value="1" class="itxt">
                                <a href="javascript:;" class="increment">+</a>
                        </div>
                        <div class="p-sum fl">¥12.60</div>
                        <div class="p-action fl"><a href="javascript:;" title="删除">删除</a>
                        </div>
                    </div>
                    <div class="cart-item">
                        <div class="p-checkbox fl"> <input type="checkbox" class="j-checkbox"></div>
                        <div class="p-goods fl" > 
                            <div class="p-goods-hd fl">
                                <img src="img/p2.jpg" alt="">
                            </div>
                            <div class="p-goods-bd fl">【5本26.8元】经典儿童文学彩图青少 <br> 版八十天环游地球中学生语文教学大纲</div>
                        </div>
                        <div class="p-price fl">¥24.80</div>
                        <div class="p-num fl">
                                <a href="javascript:;" class="decrement">-</a>
                                <input type="text" value="1" class="itxt">
                                <a href="javascript:;" class="increment">+</a>
                        </div>
                        <div class="p-sum fl">¥24.80</div>
                        <div class="p-action fl"><a href="javascript:;" title="删除">删除</a>
                        </div>
                    </div>
                    <div class="cart-item">
                        <div class="p-checkbox fl"> <input type="checkbox" class="j-checkbox"></div>
                        <div class="p-goods fl" > 
                            <div class="p-goods-hd fl">
                                <img src="img/p3.jpg" alt="">
                            </div>
                            <div class="p-goods-bd fl">【5本26.8元】经典儿童文学彩图青少 <br> 版八十天环游地球中学生语文教学大纲</div>
                        </div>
                        <div class="p-price fl">¥29.80</div>
                        <div class="p-num fl">
                                <a href="javascript:;" class="decrement">-</a>
                                <input type="text" value="1" class="itxt">
                                <a href="javascript:;" class="increment">+</a>
                        </div>
                        <div class="p-sum fl">¥29.80</div>
                        <div class="p-action fl"><a href="javascript:;" title="删除">删除</a>
                        </div>
                    </div>
                    <div class="cart-item-last">
                        <div class="p-checkbox fl"> <input type="checkbox" class="checkall"> <span > 全选</span> </div>
                        <div class="remove-checked fl"> <a href="javascript:;">删除选中的商品</a></div>
                        <div class="remove-all fl"> <a href="javascript:;">清理购物车</a> </div>
                        <div class="toolbar-right fr">
                            <div class="amount-sum fl">已经选 <span>1</span>件商品 </div>
                            <div class="price-sum fl">总价: <span>¥12.60</span></div>
                            <div class="btn-area fl"><a href="javascript:;">去结算</a></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>


        <!-- footer部分 start -->
        <div class="last-bottom">
            <div class="footer-restart" id="footer-restart">
                <div class="w">
                    <div class="footer-top">
                        <ul>
                            <li class="footer-top-li1">
                                <div class="img-left img-left-icon1 fl"></div>
                                <div class="text-right fl">
                                    <h4>正品保障</h4>
                                    <p>正品保障,提供发票</p>
                                </div>
                            </li>
                            <li>
                                <div class="img-left img-left-icon2 fl"></div>
                                <div class="text-right fl">
                                    <h4>极速物流</h4>
                                    <p>急速物流,极速送达</p>
                                </div>
                            </li>
                            <li>
                                <div class="img-left img-left-icon3 fl"></div>
                                <div class="text-right fl">
                                    <h4>无忧售后</h4>
                                    <p>7天无理由退还</p>
                                </div>
                            </li>
                            <li>
                                <div class="img-left img-left-icon4 fl"></div>
                                <div class="text-right fl">
                                    <h4>特色服务</h4>
                                    <p>私人定制家电套餐</p>
                                </div>
                            </li>
                            <li>
                                <div class="img-left img-left-icon5 fl"></div>
                                <div class="text-right fl">
                                    <h4>帮助中心</h4>
                                    <p>您的购物指南</p>
                                </div>
                            </li>
                            
                        </ul>
                    </div>
                    <div class="footer-middle">
                        <ul class="max-ul">
                            <li class="max-li">
                                <h4>购物指南</h4>
                                <ul class="footer-middle-ul">
                                    <li>购物流程</li>
                                    <li>会员介绍</li>
                                    <li>生活旅行/团购</li>
                                    <li>常见问题</li>
                                    <li>大家电</li>
                                    <li>联系客服</li>
                                </ul>
                            </li>
                            <li class="max-li">
                                <h4>配送方式</h4>
                                <ul class="footer-middle-ul">
                                    <li>上门自提</li>
                                    <li>211限时达</li>
                                    <li>配送服务查询</li>
                                    <li>配送费收取标准</li>
                                    <li>海外配送</li>
                                </ul>
                            </li>
                            <li class="max-li">
                                <h4>支付方式</h4>
                                <ul class="footer-middle-ul">
                                    <li>货到付款</li>
                                    <li>在线支付</li>
                                    <li>分期付款</li>
                                    <li>常见问题</li>
                                    <li>邮局汇款</li>
                                    <li>公司转账</li>
                                </ul>
                            </li>
                            <li class="max-li">
                                <h4>售后服务</h4>
                                <ul class="footer-middle-ul">                            
                                    <li>售后政策</li>
                                    <li>价格保护</li>
                                    <li>退款说明</li>
                                    <li>常见问题</li>
                                    <li>返修/退换货</li>
                                    <li>取消订单</li>
                                </ul>
                            </li>
                            <li class="max-li">
                                <h4>特色服务</h4>
                                <ul class="footer-middle-ul">
                                    <li>夺宝岛</li>
                                    <li>DIY装机</li>
                                    <li>延保服务</li>
                                    <li>品优购E卡</li>
                                    <li>品优购通信</li>
                                </ul>
                            </li>
                            <li class="max-li max-li-last">
                                <h4>帮助中心</h4>
                                <div class="ewm"></div>
                                <p>品优购客户端</p>
                            </li>
                        </ul>
                    </div>
                <div class="footer-end">
                <!-- 不要想多了,这个版权部分就是两个p -->
            <p class="end-p1">关于我们   <span class="sx2">|</span>   联系我们  <span class="sx2">|</span>   联系客服  <span class="sx2">|</span>  商家入驻  <span class="sx2">|</span>  营销中心  <span class="sx2">|</span>  手机品优购  <span class="sx2">|</span>  友情链接  <span class="sx2">|</span>  销售联盟  <span class="sx2">|</span>  品优购社区  <span class="sx2">|</span>  品优购公益  <span class="sx2">|</span>  English Site  <span class="sx2">|</span>   Contact U</p>
            <p class="end-p2">地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096 电话:400-618-4000 传真:010-82935100 邮箱: zhanghj+itcast.cn <br>
                京ICP备08001421号京公网安备110108007702
                </p>
                </div>
                </div>
            </div>
        </div>
        <!-- footer部分 end   -->
</body>
<script src="jquery.min.js"></script>
<script src="shopcar.js"></script>
</html>
.shopcar-gwc{
    position: absolute;
    top: 34px;
    left: 189px;
    font-size: 20px;
    font-weight: 600;
}

.cart-filter-bar span{
    width: 74px;
    height: 32px;
    font-size: 16px;
    font-weight: 600;
    border-bottom: 1px solid #E2231A;
    padding: 5px;/*向内挤出5px,留出上下左右的缝隙,其实可以只给padding-bottom,在此效果相同*/
    color: #E2231A;;
}

.cart-thead{
    margin-top: 4px;
    width: 1200px;
    height: 32px;
    padding: 5px 0;/*从内部撑开上下的5px*/
    line-height: 32px;
    background-color: #f3f3f3;

}

.cart-thead .t-checkbox{
    width: 118px;
    padding-left: 15px;
}

.cart-thead .t-goods{
    width: 400px;
}

.cart-thead .t-price{
    width: 130px;
    text-align: right;
    padding-right: 30px;
}
.cart-thead .t-num{
    width: 150px;
    text-align: center;
}
.cart-thead .t-sum{
    width: 100px;
    text-align: right;
}
.cart-thead .t-action{
    width: 130px;
    text-align: right;
}

.cart-item{
    margin-top: 20px;
}

.cart-item .p-checkbox{
    width:  46px;
    height: 25px;
}

.cart-item .p-goods{
    width: 565px;
    height: 92px;
}

.cart-item .p-price{
    width: 110px;
    height: 18px;
}

.cart-item .p-num{
    width: 170px;
    height: 22px;
}

.cart-item .p-sum{
    width: 145px;
    height: 18px;
}

.cart-item{
    height: 160px;
}

.p-goods-hd {
    height: 87px;
    width: 87px;
    padding: 5px;
    border: 1px solid #ccc;;
}

.p-goods-bd{
    padding-left: 10px;
}

.cart-item{
    padding-top: 20px;
    /*发现设置完边框以后,挤在一起了,内部用padding*/
    border-style: solid;
    border-width: 2px 1px 1px;
    border-color: #aaa #f1f1f1 #f1f1f1;
}

.p-checkbox {
    padding-left: 15px;
}

.p-sum{
    font-weight: 600;
}

.p-num .itxt{
    float: left;
    width: 46px;
    border:1px solid #cacbcb ; 
    height: 18px;
    text-align: center;
    font-size: 12px;
    font-family: verdana;
    color: #333;
    margin-left: -1px;/*由于左右a与中间的input均有边框,因此中间input左右边框为2px,只想要1px,因此通过margin -1,左移,右移,盖住多余的1px*/
    margin-right: -1px;
    outline: none;
}

.p-num .increment,
.p-num .decrement{
    /*行内转为块,给宽高*/
   /*  display: inline-block; */
   float: left;
    width: 16px;
    height: 18px;
    border:1px solid #cacbcb;
    text-align: center;
}

.cart-item-last{
    margin-top: 20px;
    margin-bottom: 80px;
    width: 1200px;
    height: 52px;
    line-height: 52px;
    border: 1px solid #f0f0f0;
}

.remove-all{
    font-weight: 600;
}

.remove-checked{
    width: 120px;
    text-align: right;
}

.remove-all{
    width: 150px;
    text-align: center;
}


.amount-sum span{
    color:#E2231A;
    padding: 0 5px;
    font-weight: 800;
}

.price-sum span {
    font-size: 16px;
    color: #E2231A;
    font-weight: 600;
    padding-left: 8px;/*没有宽度随便给padding*/
}

.price-sum{
    margin: 0 15px 0;
}

.btn-area{
    width: 94px;
    height: 52px;
    background-color: #e54346;

    font-size: 18px;
    font-weight: 800;
    text-align: center;
    line-height: 52px;
    font-family: "Microsoft YaHei";
}

.btn-area a{
    color: #fff;
}

.check-cart-item{
    background-color: #fff4e8;
}
/*      实现功能:
            1.选中全选按钮,选中下方全部按钮,取消选中全选按钮,取消选中下方全部按钮 
                ---------------即将checkall的状态赋给j-checkbox,通过prop来实现效果。
            2.选中所有下方按钮,自动选中上方全选按钮(一个冒号)
                ----------------即关键看$(j-checkbox:checked).length,即选中的复选框个数与复选框总数是否相等,相等即将checkall通过prop将checked设置true
            3.点击操作列中的删除按钮,删除该行所对应的商品行
                -----------------即通过parents()找到该行对应的祖先元素item,然后删除该行所对应的item
            4.点击删除选中的商品按钮,删除选中的商品
                ------------------即直接删除选中的j-checkbox所在的行(item),如果没选中则不进行操作,注意remove是最后写  元素.remove()
            5.点击清理购物车,删除所有商品
                -------------------即直接删除所有j-checkbox的祖先(item),通过隐式迭代即可完成。
            6.点击加号减号,对应实现其数加减效果并保存
                ---------------------元素.val(),获取input内的value值的特定用法
                --------------------首先获取其input内目前的值,然后根据加减对应a++,a--,再通过元素.val(a)直接修改其内部input的value值即可实现
            7.加号减号改变时,对应商品的小计价格同步变化
                ----------------------substr(1),去除最前面一位数,元素.toFixed(2)保留两位小数,注意不要放到外面,因为里面还有¥符号。
                ---------------------由于价格的变化是加减数量导致的,因此放到加减数量的事件里,精髓就是不要直接用元素*,而是要通过html()取和改元素内的值
            8.  $(this).siblings('.itxt').val(a)
                如果不写这句话 去写这句$('.itxt').val(a),所有商品的数量均会一起变动。
                var money = $('.itxt').parents('.p-num').siblings('.p-price').html()
                如果不写这句话,所有的钱数均会一起变动且钱数相同
                var money= $('.p-price').html() 这是错误的,所有的价格均为第一个单价相乘的价格
            ________________________________________________________________________________________
                                以上弊端均为不写sibiling导致的,因钱数和个数不同,因此每行必须找到对应的数值,且赋给每行对应的sum,因此发生的问题

            9. 动态修改已经选了 x 件商品,计算总数,计算总钱
                    ------------------------均需要通过each循环完成,多次重复用到,只要改动就删除就要重新调用,因此单独写一个函数getsum()
            10.选中的j-checkbox所在的item盒子背景色变化,没选中的背景色不变       
                $('.j-checkbox').on("change",function(){
                if($(this).prop("checked"))   千万不要写 checked ,true ,else checked ,false  ,直接写checked即可实现效果
                $(this).parents('.cart-item').addClass('check-cart-item') 
                else
                $(this).parents('.cart-item').removeClass('check-cart-item')  
                发现加载页面默认第一个j-checkbox为选中状态,因此再html中特地在第一个checkbox中设置 checked='checked'
            11.如果用户直接在input内修改数量,也要进行其对应变化,即单独写为input写change事件重新重复一遍即可
                    ------------------------单独算修改的对应input所在行的小计的钱(单独写这部分),总数和总钱仅需重新调用即可
            }) 
            */
 


$(function(){

    getsum()
    /*上来默认加载一次,解决个数和钱数一打开不对的问题*/ 
    $('.checkall').on("click",function(){
        /*与此同时,最下方的checkall也跟随其同步调整,同一个$里面放多个元素中间用,隔开*/ 
        $('.j-checkbox , .checkall').prop('checked',$('.checkall').prop('checked'))
    })

    $('.j-checkbox').on("click",function(){
        /*查看选中的个数通过元素.lenth实现*/
        if($('.j-checkbox:checked').length===$('.j-checkbox').length)
        $('.checkall').prop('checked',true)
        else    /*一定记得要给每个通过类绑定的元素前加.,否则找不到,肯定失效*/ 
        $('.checkall').prop('checked',false)

        /* $(this).ToggleClass('check-cart-item') 不是对按钮加背景,而是对按钮所对应的行item加背景 */
        /* $(this).parents('.cart-item').ToggleClass('check-cart-item') */
    })

    $('.j-checkbox').on("change",function(){
        if($(this).prop("checked"))
        $(this).parents('.cart-item').addClass('check-cart-item') 
        else
        $(this).parents('.cart-item').removeClass('check-cart-item')  
    })

    $('.checkall').on("change",function(){
        /*因为checkall状态与j-checkbox相同,因此根据选中状态直接为.cart-item,而不是从this出发找他们,从而添加类(因为这里的关系已经明确)*/ 
        if($(this).prop("checked"))
        $('.cart-item').addClass('check-cart-item') 
        else
        $('.cart-item').removeClass('check-cart-item')  
    })  

    $('.p-action a').on("click",function(){
        $(this).parents(".cart-item").remove()
        getsum()
    })

    $('.remove-checked').on("click",function(){
        /*记得,要修改效果的位置如果是a,一定要在前面设置javascript:;,否则给效果的时候点击自动刷新看不出来!*/ 
      $('.j-checkbox:checked').parents('.cart-item').remove()
      getsum()
    })

    $('.remove-all').on("click",function(){
        $('.j-checkbox').parents('.cart-item').remove()
        getsum()
    })

    $('.decrement').on("click",function(){
        var a = $(this).siblings('.itxt').val()
       a--
       if(a<=0) a=0
       $(this).siblings('.itxt').val(a)

       //拿单价
       var  linemoney = $(this).parent().siblings('.p-price').html()
       //去符号
       linemoney = linemoney.substr(1)
       //改每行对应的总钱数,由于每行的数量与单价不一样,因此改的时候必须通过sibilings找到其对应的小计再调整数值,不能直接找到小计赋值!钱数不一样
       //加符号,算钱数,取小数
       $(this).parent().siblings('.p-sum').html("¥"+(linemoney*a).toFixed(2))

       //已经选了多少件商品,因加减个数导致的,写在其加减个数里面(宗旨为从个数出发,找其要改的位置在哪,进行对应行操作,)
        //这里需要通过each实现目标
        getsum()
    })

        function  getsum(){
            /*把算总数和算总钱单独写一个函数,为什么?
                 算总数都要用到each(循环)
                因为每次操作完后,例如各种删除完,都要重新统计总个数和总钱数,要重复写很多次,因此写到函数里*/ 
            var count=0;
            $('.itxt').each(function(i,DomElm){
                //这里的domelm就是便利中的每个input元素
                count+= parseInt($(DomElm).val())
                /*不转换为int,就会出现0111的情况*/ 
            })
            $('.amount-sum span').text(count)
            //总个数算完了
            var summoney=0;
            $('.p-sum').each(function(i,DomElm){
               summoney+= parseFloat($(DomElm).text().substr(1))
            })
            $('.price-sum').addClass('turnred') /*样式消失,重新为其添加样式*/ 
            $('.price-sum').html("¥"+summoney.toFixed(2))
        }

    $('.increment').on("click",function(){
        /*在此必须给限制,必须严谨!取得给的是自己的兄弟input内的数值,不是别的item内的数值!,否则出现问题,上面的会影响到下面的*/ 
        var a = $(this).siblings('.itxt').val()
        a++
        $(this).siblings('.itxt').val(a)

       //拿单价
       var  linemoney = $(this).parent().siblings('.p-price').html()
       //去符号
       linemoney = linemoney.substr(1)
       //改每行对应的总钱数,由于每行的数量与单价不一样,因此改的时候必须通过sibilings找到其对应的小计再调整数值,不能直接找到小计赋值!钱数不一样
       //加符号,算钱数,取小数
       $(this).parent().siblings('.p-sum').text("¥"+(linemoney*a).toFixed(2))
       getsum()
     })

     $('.itxt').on("change",function(){
       //找对应更改input位置数量
       var count1 = $(this).val()
       //找对应更改input位置钱
       /* var money1 = $(this).parents('.p-num').siblings('.p-price')  找的是对应元素的内容,而不是元素*/
       var money1 = $(this).parents('.p-num').siblings('.p-price').text() 
       //去除符号
       money1 = money1.substr(1)
       /*对应修改所在行小计*/ 
       $(this).parents('.p-num').siblings('.p-sum').html("¥"+(count1*money1).toFixed(2))

       /*再次调用函数,对总数和总钱数没有影响,因为函数只负责这两块,而之前特殊的行钱已经在上方单独写清楚了*/
       getsum() 

     })

}) 

在这里插入图片描述

  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值