HTML,CSS,JS完成购物车功能

这是我们要完成的购物车界面
在这里插入图片描述

  1. 初始状态,当我选中某件商品时,总数量栏,总价栏显示默认数量和总价。
  2. 当我点击全选按钮时,所有的复选框都要被我选到。当我取消全选按钮时,所有商品都要取消选中状态。
  3. 当购物车处于全选状态时,如果我取消选中某一件商品,全选按钮就要处于未被选中的状态。
  4. 当选中某个商品时,我可以对它进行任何操作,包括:增加、减少、删除。
  5. 当我点击结算时,系统告诉我购物的总价。

通过HTML和CSS布局后可以得到下面这个模型(完整代码参考文尾)
在这里插入图片描述
紧接着我们就要在这基础上增加各种功能。

  1. 全选按钮。
oSelect.onclick = function() {
		if (oSelect.checked) {
			for (var i = 0; i < aItems.length; i++) {
				if (aItems[i].checked) {

				} else {
					oSelect.checked = true;
					aItems[i].checked = true;
					getStart();
				}
			}
		} else {
			//全消
			for (var i = 0; i < aItems.length; i++) {
				if (aItems[i].checked) {
					aItems[i].checked = false;
					oSum.innerText = 0;
					oGoods.innerText = 0;
				} else {}
			}
		}
	}   
  1. 单击复选框,判断我所勾选的复选框。
function getStart() {  
	var oSelect = document.getElementById("selectAll");
	var aItems = document.getElementsByClassName("check-one"); 
	var oSum = document.getElementById("priceTotal");
	var oGoods = document.getElementById("selectedTotal"); 
	
	var aSubtotal = document.getElementsByClassName("subtotal");
	var aCountInput = document.getElementsByClassName("count-input");   
	var a=0;
	
	for (var i=0; i<aItems.length; i++) {  
		if (aItems[i].checked) {   
			chooseIt(i); 
			a++; 
			if(a==3){
				oSelect.checked=true;	//当所有选项都选到时,全选按钮自动勾选
			}
		} else {  
			oSelect.checked = false;	//任意一个选项没勾选,全选按钮不选
			chooseIt(i);
		}
	}   
}

3.对商品进行加、减和删除。

function getPlus(n) {
	var aCountInput = document.getElementsByClassName("count-input"); 
	
	//增加单件商品的数量
	var temp = parseInt(aCountInput[n].value) + 1;
	aCountInput[n].value = temp;
}
function getReduce(n) {
	var aCountInput = document.getElementsByClassName("count-input");

	//减少单件商品的数量
	var temp = parseInt(aCountInput[n].value) - 1;
	aCountInput[n].value = temp;

	//当剪到数量为1件时,停止减
	if (aCountInput[n].value < 1) {
		aCountInput[n].value = 1;
	}
}
aDel[i].onclick = function() {  
		var oDialog = confirm("确定要删除吗?");
		if (oDialog) { 
			oTab.tBodies[0].removeChild(aDel[i].parentNode.parentNode);
			getGoods();
			getSum();
		}
		getStart(); 	//更新表格中行的数量
	}
  1. 然后计算单件商品的总价,总商品的数量和总价。
function getTotal(n) {
	var aPrice = document.getElementsByClassName("price");
	var aCountInput = document.getElementsByClassName("count-input");
	var aSubtotal = document.getElementsByClassName("subtotal");
	
	//计算单件商品的总价
	var oMoney = parseInt(aPrice[n].innerText) * parseInt(aCountInput[n].value);
	aSubtotal[n].innerText = oMoney;
}
function getGoods() { 
	var num = 0;
	var oGoods = document.getElementById("selectedTotal");
	var aItems = document.getElementsByClassName("check-one");
	var aCountInput = document.getElementsByClassName("count-input"); 
	
	//循环,计算选中的商品的总数量
	for (var i = 0; i < aItems.length; i++) {
		if (aItems[i].checked) {
			num += parseInt(aCountInput[i].value);
		} else {
			num += 0;
		}
	}

	oGoods.innerText = num;
}
function getSum() {
	var temp = 0;
	var oSum = document.getElementById("priceTotal");
	var aItems = document.getElementsByClassName("check-one");
	var aSubtotal = document.getElementsByClassName("subtotal");
	
	//循环,计算选中的商品的总价格
	for (var j = 0; j < aItems.length; j++) {
		if (aItems[j].checked) {
			temp += parseInt(aSubtotal[j].innerText);
		} else {
			temp += 0;
		}
	}

	oSum.innerText = temp;
}

5.结算时弹出文本框显示所花的金额。(这一步超级简单,只需要把总价栏的金额弹出来即可)

function showTotal() {
	var money = document.getElementById("priceTotal").innerText;
	alert("你总共花了" + money + "大洋");
}

在这里我们就完成了购物车,购物车看起来很简单,但实际操作起来还是要严谨的逻辑思维,基于曾经看别人关于购物车的博客,多多少少都有些小细节上的错误或者不完善,在此我给大家一个完美的购物车,希望能帮助到大家,大家有疑问可在下方评论,看到了会及时回复的哟!

详细代码: https://github.com/Siwen19/js/tree/master/myShoppingCart

HTML: ```html <!DOCTYPE html> <html> <head> <title>购物车</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h1>购物车</h1> <table> <thead> <tr> <th>商品名称</th> <th>单价</th> <th>数量</th> <th>小计</th> <th>操作</th> </tr> </thead> <tbody id="cart-list"> <tr> <td>商品1</td> <td>100</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>100</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> <tr> <td>商品2</td> <td>200</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>200</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> <tr> <td>商品3</td> <td>300</td> <td><input type="number" min="1" value="1" onchange="changeQuantity(this)"></td> <td>300</td> <td><button onclick="removeItem(this)">删除</button></td> </tr> </tbody> <tfoot> <tr> <th colspan="3">合计:</th> <th id="total-price">600</th> <th><button onclick="clearCart()">清空购物车</button></th> </tr> </tfoot> </table> </body> <script src="script.js"></script> </html> ``` CSS: ```css table { border-collapse: collapse; margin: 20px auto; } th, td { border: 1px solid #ccc; padding: 10px; text-align: center; } th { background-color: #eee; } button { background-color: #f00; color: #fff; border: none; padding: 5px 10px; cursor: pointer; } input[type="number"] { width: 50px; text-align: center; } ``` JavaScript: ```javascript // 获取购物车商品列表 let cartList = document.getElementById('cart-list').rows; // 计算总价 function calcTotalPrice() { let totalPrice = 0; for (let i = 1; i < cartList.length - 1; i++) { let quantity = cartList[i].cells[2].children[0].value; let price = cartList[i].cells[1].innerHTML; let subtotal = quantity * price; cartList[i].cells[3].innerHTML = subtotal; totalPrice += subtotal; } document.getElementById('total-price').innerHTML = totalPrice; } // 改变商品数量 function changeQuantity(input) { if (input.value < 1) { input.value = 1; } calcTotalPrice(); } // 删除商品 function removeItem(button) { let row = button.parentNode.parentNode; row.parentNode.removeChild(row); calcTotalPrice(); } // 清空购物车 function clearCart() { for (let i = 1; i < cartList.length - 1; i++) { cartList[i].parentNode.removeChild(cartList[i]); } document.getElementById('total-price').innerHTML = 0; } ``` 这段代码实现了一个简单的购物车功能,可以添加商品、删除商品、修改数量,并且会实时计算总价
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值