力扣-200-島嶼的數量
阿新 • • 發佈:2020-08-11
原生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>
好了,全部的功能已經實現了,這是利用原生程式碼實現的簡易購物車,當然如果有需求也可以寫的更炫酷一點;
本文轉載於:https://www.cnblogs.com/xxmx/p/13413971.html