原生JavsScript实现简单购物车面向对象原生代码

Posted xxmx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生JavsScript实现简单购物车面向对象原生代码相关的知识,希望对你有一定的参考价值。

原生js实现购物车功能 —面向对象;

  购物车在电商网站基本都需要用到,今天我们用面向对象编程思想来写一个购物车

  首先,我们先来看一下要实现的效果:

技术图片

 

 

 

 

 

 

 

 

 

我们来从明面上分析下这个程序的需求:

  1.购物车肯定要有增加以及减少货物数量的功能;

  2.具有删除货物的功能

  3.添加菜单的功能

  这是我们可以看到的功能,那么现在开始上代码吧;

 

我们先完成html页面:

 <!DOCTYPE html>
 <html lang="en">
 
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
     <style>
         * {
             margin: 0;
             padding: 0;
         }
 
         table {
             width: 800px;
             text-align: center;
             margin: 40px auto;
             border: 1px solid black;
         }
 
         th {
             height: 50px;
             background: #98FB98;
             border: 1px solid black;
         }
 
         td {
             height: 50px;
             border: 1px solid black;
 
         }
 
         button {
             width: 20px;
             height: 20px;
         }
     </style>
 </head>
 
 <body>
     <table class="tab">
         <tr>
             <th>序号</th>
             <th>商品名称</th>
             <th>数量</th>
             <th>单价</th>
             <th>小计</th>
             <th>操作</th>
         </tr>
         <tr>
             <td class="other">1</td>
             <td class="MenuName">麻辣香锅</td>
             <td><button>-</button><span class="numberOf">0</span><button>+</button></td>
             <td>单价:<span>18</span></td>
             <td>小计:<span class="HowSubtotal">0</span></td>
             <td>操作:<input type="button" value="删除" class="del"></td>
         </tr>
         <tr>
             <td class="other">2</td>
             <td class="MenuName">红烧排骨</td>
             <td><button>-</button><span class="numberOf">0</span><button>+</button></td>
             <td>单价:<span>25</span></td>
             <td>小计:<span class="HowSubtotal">0</span></td>
             <td>操作:<input type="button" value="删除" class="del"></td>
         </tr>
         <tr>
             <td colspan="6">
                 商品一共<span id="ToNumber">0</span>件,共<span id="ToMoney">0</span>元;
             </td>
         </tr>
     </table>
     <table cellspacing="0">
         <tr>
             <th>序号</th>
             <th>商品名称</th>
             <th>单价</th>
             <th>操作</th>
         </tr>
         <tr>
             <td>1</td>
             <td>回锅肉</td>
             <td>单价:<span>19</span></td>
             <td>操作:<input type="button" value="添加" class="add"></td>
         </tr>
         <tr>
             <td>2</td>
             <td>青椒肉丝</td>
             <td>单价:<span>12</span></td>
             <td>操作:<input type="button" value="添加" class="add"></td>
         </tr>
     </table>
 </body>
 
 </html>

 

它现在就是这个样子:

技术图片

 

 

 现在给他添加javascript代码让他动起来

 <script>
     class ShoppingCart {
         //获取数量
         NumberOf() {
             let numberOf = document.getElementsByClassName("numberOf");//获取商品页面商品数量
             let oNumber = 0;//给数量一个初始化值
             for (let i = 0; i < numberOf.length; i++) {
                 oNumber += Number(numberOf[i].innerHTML);//拿到总数量=各个商品数量加起来
             }
             // 总数量
             let ToNumber = document.getElementById("ToNumber");
             ToNumber.innerHTML = oNumber;
         }
         //获取金额
         HowMoney() {
             let HowSubtotal = document.getElementsByClassName("HowSubtotal");
             let oHowSubtotal = 0;
             for (let i = 0; i < HowSubtotal.length; i++) {
                 oHowSubtotal += Number(HowSubtotal[i].innerHTML);
             }
             let ToMoney = document.getElementById("ToMoney");
             ToMoney.innerHTML = oHowSubtotal;
         }
         //小计
         Tosubtotal(num, price) {
             return num * price;//小计=数量*单价
         }
         //计算增加
         increase(btn) {
             //数量//通过点击的节点获取
             let NumberOf = btn.previousElementSibling;
             NumberOf.innerHTML = Number(NumberOf.innerHTML) + 1;
             //单价
             let price = btn.parentNode.nextElementSibling.firstElementChild;
             //小计
             let subtotal = btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
             subtotal.innerHTML = this.Tosubtotal(NumberOf.innerHTML, price.innerHTML);
             this.NumberOf();
             this.HowMoney();
         }
         // 计算减少
         toReduce(btn) {
             let NumberOf = btn.nextElementSibling;
             //数量
             if (NumberOf.innerHTML > 0) {
                 NumberOf.innerHTML = NumberOf.innerHTML - 1;
                 //单价
                 let price = btn.parentNode.nextElementSibling.firstElementChild;
                 //小计
                 let subtotal = btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
                 subtotal.innerHTML = this.Tosubtotal(NumberOf.innerHTML, price.innerHTML);
                 this.NumberOf();
                 this.HowMoney();
             }
         }
         //删除
         Dele(btn) {
             let oTr = btn.parentNode.parentNode;
             oTr.remove();
             this.NumberOf();//删除之后数量会变化所以需要调用数量
             this.HowMoney();//删除之后金额会变化所以要调用金额
             this.other();//调用序号
         }
         //增加菜单
         increaseMenu(btn) {
             // 获取表格
             let oTabl = document.querySelector(".tab");
             // 获取第一个元素
             let firstChi = oTabl.firstElementChild;
             // 获取最后一个元素
             let lastChi = firstChi.lastElementChild;
             // 获取商品名称
             let goodsName = btn.parentNode.previousElementSibling.previousElementSibling;
             // 获取价格
             let googsMoney = btn.parentNode.previousElementSibling.firstElementChild;
             // 创建tr
             let oTr = document.createElement("tr");
             // 添加内容
             oTr.innerHTML = `<td class="other"></td>
             <td class="MenuName">${goodsName.innerHTML}</td>
             <td><button>-</button><span class="numberOf">0</span><button>+</button></td>
             <td>单价:<span>${googsMoney.innerHTML}</span></td>
             <td>小计:<span class="HowSubtotal">0</span></td>
             <td>操作:<input type="button" value="删除" class="del"></td>`
             this.eventAdd();//调用事件
             let flag = false;
             let MenuName = document.getElementsByClassName("MenuName");//获取商品名称
             for (let i = 0; i < MenuName.length; i++) {
                 if (MenuName[i].innerHTML == goodsName.innerHTML) {//判断是否有相同的名称/如果有就数量+1,然后结束循环
                     flag = true;
                     let NumberOf = MenuName[i].nextElementSibling.firstElementChild.nextElementSibling;
                     NumberOf.innerHTML = Number(NumberOf.innerHTML) + 1;
                     let toSubtotal = NumberOf.parentNode.nextElementSibling.nextElementSibling.firstElementChild;
                     toSubtotal.innerHTML = this.Tosubtotal(NumberOf.innerHTML, googsMoney.innerHTML);
                     this.NumberOf();
                     this.HowMoney();
                     break;
                 }
             }
             if (!flag) {
                 firstChi.insertBefore(oTr, lastChi);//如果没有就新添加一行
                 this.other();
                 this.eventAdd();
             }
         }
         //序号
         other() {
             let other = document.getElementsByClassName("other");
             for (let i = 0; i < other.length; i++) {
                 other[i].innerHTML = i + 1;
             }
         }
         //事件
         eventAdd() {
             let that = this;
             //增加/减少商品
             let oBtn = document.getElementsByTagName("button")
             for (let i = 0; i < oBtn.length; i++) {
                 if (i % 2) {
                     oBtn[i].onclick = function () {
                         that.increase(this);
                         console.log("abc")
 
                     }
                 } else {
                     oBtn[i].onclick = function () {
                         that.toReduce(this);
                         console.log("abc")
 
                     }
                 }
             }
             //删除
             let oDel = document.getElementsByClassName("del");
             for (let i = 0; i < oDel.length; i++) {
                 oDel[i].onclick = function () {
                     that.Dele(this);
                 }
             }
             //添加菜单
             let add = document.getElementsByClassName("add");
             for (let i = 0; i < add.length; i++) {
                 add[i].onclick = function () {
                     that.increaseMenu(this);
                 }
             }
         }
     }
     let a = new ShoppingCart();
   a.eventAdd();
</script>

 好了,全部的功能已经实现了,这是利用原生代码实现的简易购物车,当然如果有需求也可以写的更炫酷一点;

以上是关于原生JavsScript实现简单购物车面向对象原生代码的主要内容,如果未能解决你的问题,请参考以下文章

原生js简单轮播图 代码

微信小程序结合原生JS实现电商模板

纯原生JS面向对象实现打字小游戏

纯原生JS用面向对象class方法实现简易扫雷小游戏

纯原生JS面向对象构造函数方法实现贪吃蛇小游戏

原生javascript面向对象开发儿时经典打砖块小游戏