JavaScript如何用面向对象的方式写一个简单的购物车功能

JavaScript如何用面向对象的方式写一个简单的购物车

话不多说先上效果图:
效果图
HTML代码:

 <h2>有钱就是任性</h2>
    <table id="GWC" border="1">
        <tr>
            <th>商品名称</th>
            <th>数量</th>
            <th>单价</th>
            <th>小计</th>
            <th>操作</th>
        </tr>
        <tr>
            <td class="shopname">辣鸡小炒肉</td>
            <td>
                <button class="butt" type="button">-</button>
                <span class="Num">0</span>
                <button class="butt" type="button">+</button>
            </td>
            <td>单价:<span class="price">20</span></td>
            <td>小计:<span class="total">0</span></td>
            <td>操作:<input class="del" type="button" value="删除"></td>
        </tr>
        <tr>
            <td class="shopname">老婆饼</td>
            <td>
                <button class="butt" type="button">-</button>
                <span class="Num">0</span>
                <button class="butt" type="button">+</button>
            </td>
            <td>单价:<span class="price">10</span></td>
            <td>小计:<span class="total">0</span></td>
            <td>操作:<input class="del" type="button" value="删除"></td>
        </tr>
        <tr>
            <td colspan="5" style="text-align: center;">共<span id="goodsNum">0</span>件商品,总共花费<span id="moneyNum">0</span>元</td>
        </tr>
    </table>
    <hr>
    <h2>菜单</h2>
    <table id="CD" border="1">
        <tr>
            <th>商品名称</th>
            <th>单价</th>
            <th>操作</th>
        </tr>
        <tr>
            <td>陕西肉夹馍</td>
            <td>单价:<span class="CDprice">9</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>宫保鸡丁</td>
            <td>单价:<span class="CDprice">25</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>鱼香肉丝</td>
            <td>单价:<span class="CDprice">22</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>蓝莓山药</td>
            <td>单价:<span class="CDprice">25</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>水煮肉片</td>
            <td>单价:<span class="CDprice">40</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>老碗鱼</td>
            <td>单价:<span class="CDprice">55</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
        <tr>
            <td>大盘鸡</td>
            <td>单价:<span class="CDprice">70</span></td>
            <td>操作:<input class="CDadd" type="button" value="添加"></td>
        </tr>
    </table>

css样式:

 h2{
            text-align: center;
        }
        table{
            margin: 0 auto;
            border-collapse: collapse;
        }

JavaScript代码:

 class Cart{
        getTotalNum(){//获取遍历每个商品数量 并把每个商品数量加起来赋给总计商品数
            let Num = document.getElementsByClassName("Num");
            let goodsnum = 0;
            for(let i=0;i<Num.length;i++){
                goodsnum += Number(Num[i].innerHTML);
            }
            let OgoodsNum = document.getElementById("goodsNum");
            OgoodsNum.innerHTML = goodsnum;
        }
        gettotal(){//获取每个商品的小计 并把每个商品小计加起来赋给总计
            let total = document.getElementsByClassName("total");
            let goodsTotal = 0;
            for(let i=0;i<total.length;i++){
                goodsTotal += Number(total[i].innerHTML);
            }
            let moneyNum = document.getElementById("moneyNum");
            moneyNum.innerHTML = goodsTotal;
        }
        countTotal(mun,price){//计算小计
            return(mun*price);
        }

        addgoods(but){//点击加按钮让数字累加
            let OaddNum = but.previousElementSibling;//获取Num元素
            OaddNum.innerHTML = Number(OaddNum.innerHTML)+1;//点击一次让元素内容加一
            //找单价节点
            let OgoodsPrice = but.parentNode.nextElementSibling.firstElementChild;
            //找小计节点
            let OTotal  = but.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
            //计算小计
            OTotal.innerHTML = this.countTotal(OaddNum.innerHTML,OgoodsPrice.innerHTML);
            this.getTotalNum();
            this.gettotal();
        }
        mingoods(but){
            let OminNum = but.nextElementSibling;//获取Num元素
            if(OminNum.innerHTML>0){
                OminNum.innerHTML = OminNum.innerHTML-1;//点击一次让元素内容减一
                 //找单价节点
                let OgoodsPrice = but.parentNode.nextElementSibling.firstElementChild;
                //找小计节点
                let OTotal  = but.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
                //计算小计
                OTotal.innerHTML = this.countTotal(OminNum.innerHTML,OgoodsPrice.innerHTML);
                this.getTotalNum();
                this.gettotal();
            }
        } 

        deltr(but){
            let Otr = but.parentNode.parentNode;
            Otr.remove();
            this.getTotalNum();
            this.gettotal();
        } 
        //----------------------------------------------------------------
        //菜单功能
        //添加
        Oadd(CDbut){
            let that = this;
            //获取菜单中商品名称
            let OCDshoop =  CDbut.parentNode.parentNode.firstElementChild;
            //获取菜单单价
            let OCSprice = CDbut.parentNode.previousElementSibling.firstElementChild;
            //动态创建
            let Otbody = document.getElementById("GWC").firstElementChild;//获取tbody
            let Olasttr = Otbody.lastElementChild;//获取购物车最后一行
            let Otr = document.createElement("tr");//创建tr
           
            let OCDpName = document.getElementsByClassName("shopname");//获取购物车中所有的商品名
            
            let Oflagtext = false;//假设列表无重复
            
            for(let i=0;i<OCDpName.length;i++){
                if(OCDpName[i].innerHTML==OCDshoop.innerHTML){
                    //如果有重复的将按钮作为实参传递,调用添加商品函数
                    that.addgoods(OCDpName[i].nextElementSibling.lastElementChild);
                    Oflagtext=true;
                    break;
                }
            }
            if(Oflagtext == false){
                Otr.innerHTML=
                `<td class="shopname">${OCDshoop.innerHTML}</td>
                <td>
                <button class="butt" type="button">-</button>
                <span class="Num">0</span>
                <button class="butt" type="button">+</button>
                </td>
                <td>单价:<span class="price">${OCSprice.innerHTML}</span></td>
                <td>小计:<span class="total">0</span></td>
                <td>操作:<input class="del" type="button" value="删除"></td>
                `
                Otbody.insertBefore(Otr,Olasttr);//将tr添加到tbody中倒数一行的之前
                that.eventbind();
            }
        }

        eventbind(){
            let that = this;//this指的是调用它的函数
            //点击购物车里的加减
            let Obut = document.getElementsByClassName("butt");
            for(let i=0;i<Obut.length;i++){
                if(i%2){
                    Obut[i].onclick = function(){
                        that.addgoods(this);
                    }
                }else{
                    Obut[i].onclick = function(){
                        that.mingoods(this);
                    }
                }
            }
            //点击购物车里的删除
            let Odel = document.getElementsByClassName("del");
            for(let i=0;i<Odel.length;i++){
                Odel[i].onclick = function(){
                    var qr = confirm("亲,你真的要删除吗?");
                    if(qr==true){
                       that.deltr(this); 
                    } 
                }
            }
         //点击菜单里的加减按钮
         let OCDbut = document.getElementsByClassName("CDbutt");
         for(let i=0;i<OCDbut.length;i++){
                if(i%2){
                    OCDbut[i].onclick = function(){
                        that.CDaddgoods(this);
                    }
                }else{
                    OCDbut[i].onclick = function(){
                        that.CDmingoods(this);
                    }
                }
            }
           //点击菜单里的添加
           let OCDadd = document.getElementsByClassName("CDadd");
            for(let i=0;i<OCDadd.length;i++){
                OCDadd[i].onclick = function(){
                    that.Oadd(this);
                }
            } 
        }
        
    }
    let c = new Cart();

	c.eventbind();

猜你喜欢

转载自blog.csdn.net/qq_43923146/article/details/107694535