利用面向对象写的购物车,本地存储,添加删除,功能都能实现
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
* {
padding: 0;
margin: 0;
text-decoration: none;
}
body {
background: #EA4335;
}
.main {
width: 800px;
margin: auto;
margin-top: 20px;
}
.top {
background: #fff;
padding: 10px;
}
.ipt {
width: 230px;
height: 32px;
line-height: 32px;
border: 1px solid #ccc;
outline: none;
}
.btn {
height: 34px;
width: 120px;
border: none;
}
.cart {
background: #fff;
margin-top: 20px;
padding: 10px;
}
.cart .tr {
height: 35px;
}
.cart .tr div {
float: left;
line-height: 35px;
}
.cart .tr {
padding: 5px 0px;
border-bottom: 1px solid #ccc;
}
.cart .tr {
clear: both;
}
.cart .tr div:nth-child(1) {
width: 20%;
}
.cart .tr div:nth-child(2) {
width: 20%;
}
.cart .tr div:nth-child(3) {
width: 20%;
}
.cart .tr div:nth-child(4) {
width: 30%;
}
.cart .tr div:nth-child(5) {
width: 10%;
}
.cart .tr input {
width: 50px;
}
.footer {
background: #fff;
margin-top: 20px;
padding: 10px;
}
#amount {
color: red;
}
</style>
<script type="text/javascript">
window.addEventListener('load', function () {
class Cart {
goods = [
// {
// id: 1,
// title: '手机',
// price: 2000,
// num: 1,
// checked: false
// },
// {
// id: 2,
// title: '平板',
// price: 2000,
// num: 1,
// checked: false
// },
// {
// id: 3,
// title: '电脑',
// price: 2000,
// num: 1,
// checked: false
// },
// {
// id: 4,
// title: '手表',
// price: 2000,
// num: 1,
// checked: false
// }
];
goodsNode = document.getElementById('goods'); //商品列表dom
addCart = document.getElementById('addCart'); //添加事件中的按钮dom
selectAll = document.getElementById('selectAll'); //全选
countNode = document.getElementById('count') //获取商品数量
amountNode = document.getElementById('amount') //获取商品价格
delall = document.getElementById('delall'); //清空购物车
constructor() {
if (localStorage.getItem("goods")) {
this.goods = JSON.parse(localStorage.getItem("goods"));
}
this.render();
this.addEvent();
}
//绑定监听事件
addEvent() {
var _this = this; //this交出去给里面的事件函数用
this.addCart.addEventListener('click', function () {
var title = document.getElementById('title').value;
var price = document.getElementById('price').value;
_this.addGoods({
title: title,
price: price
}); //传操作的对操作的方法里
_this.iptClear();
});
//注册删除事件
this.goodsNode.addEventListener('click', function (e) {
if (e.target.name == "del") {
var id = e.target.parentNode.parentNode.id;
_this.delGoods(id);
}
//单击选中事件
if (e.target.name == "ckboxs") {
var id = e.target.parentNode.parentNode.id;
_this.upDateGoods(id, 'checked', e.target.checked); //更改当前id的checked状态
_this.isSelectAll(); //更改全选按钮的状态
}
//+的事件
if (e.target.name == "+" || e.target.name == "-") {
var id = e.target.parentNode.parentNode.id;
_this.ChangeNum(e.target.name, id);
}
});
//全选所有的复选框
this.selectAll.addEventListener('click', function () {
_this.selectAllGoods(this.checked);
})
this.delall.addEventListener("click", function () {
_this.goods = [];
//重新渲染数据到页面上
_this.render();
})
}
//添加数据
addGoods(obj) {
//判断输入框是否为空,若为空不加数据
if (!(title.value == "" || price.value == "")) {
//随机一个id
obj.id = new Date().getTime() + Math.floor(Math.random() * 10).toString();
obj.num = 1;
obj.checked = false; //默认不选中
this.goods.push(obj);
//重新渲染数据到页面上
this.render();
}
}
//删除数据
delGoods(id) {
//删除事件
for (var i = 0; i < this.goods.length; i++) {
if (this.goods[i].id == id) { //找到此元素删除
this.goods.splice(i, 1);
}
}
//重新渲染数据到页面上
this.render();
}
//更新数据
upDateGoods(id, k, v) {
for (var i = 0; i < this.goods.length; i++) {
if (this.goods[i].id == id) { //找到此元素修改
this.goods[i][k] = v;
}
}
//重新渲染数据到页面上
this.render();
}
//全选按钮
selectAllGoods(checked) {
for (var i = 0; i < this.goods.length; i++) {
this.goods[i].checked = checked;
}
//重新渲染数据到页面上
this.render();
}
//是否全选
isSelectAll() {
//控制全选按钮的状态
var flag = true;
for (var i = 0; i < this.goods.length; i++) {
if (this.goods[i].checked == false) {
flag = false;
}
}
this.selectAll.checked = flag;
}
//改变num的数量
ChangeNum(type, id) {
for (var i = 0; i < this.goods.length; i++) {
if (this.goods[i].id == id) {
if (type == "+") {
this.goods[i].num++;
} else {
this.goods[i].num--;
this.goods[i].num = this.goods[i].num > 0 ? this.goods[i].num : 1;
}
}
}
//重新渲染数据到页面上
this.render();
}
//点击加入购物车按钮清空输入框内容
iptClear() {
document.getElementById('title').value = "";
document.getElementById('price').value = "";
}
//渲染数据到页面上
render() {
var str = '';
for (var i = 0; i < this.goods.length; i++) {
str = str + "<div class=\"tr\" id=\"" + this.goods[i].id + "\">"
str = str + "<div><input type=\"checkbox\" name=\"ckboxs\" value=\" " + this.goods[i].id +
" \" " + (this.goods[i].checked ? "checked" : "") + "></div>"
str = str + "<div>" + this.goods[i].title + "</div>"
str = str + "<div>" + this.goods[i].price + "元</div>"
str = str +
"<div><a href=\"javascript:;\" name=\"-\">-</a> <input type=\"text\" value=\"" + this
.goods[i].num +
"\" readonly=\"\"> <a href=\"javascript:;\" name=\"+\">+</a></div><div><a href=\"javascript:;\" name=\"del\">删除</a></div>"
str = str + "</div>"
}
this.goodsNode.innerHTML = str;
this.ChangeFooter();
localStorage.setItem("goods", JSON.stringify(this.goods)); //本地存储
}
//更改商品的数量和价格
ChangeFooter() {
var sum = 0;
for (var i = 0; i < this.goods.length; i++) {
//如果选中则显示选中的个数,若不选中则为0
if (this.goods[i].checked) {
sum = sum + this.goods[i].num;
} else {
this.countNode.innerHTML = 0;
}
this.countNode.innerHTML = sum;
}
var amount = 0;
for (var i = 0; i < this.goods.length; i++) {
if (this.goods[i].checked) {
amount = amount + this.goods[i].num * this.goods[i].price;
}
}
this.amountNode.innerText = amount;
}
}
var C1 = new Cart();
// C1.render();
// C1.addEvent();
})
</script>
</head>
<body>
<div class="main">
<div class="top">
商品名称:<input type="text" name="" value="" id="title" class="ipt" />
商品价格:<input type="text" name="" value="" id="price" class="ipt" />
<input type="button" value="加入购物车" class="btn" id="addCart" />
</div>
<div class="cart">
<div class="tr">
<div><input type="checkbox" name="" value="" id="selectAll" /> 全选按钮</div>
<div>商品名称</div>
<div>商品价格</div>
<div>数量</div>
<div>操作</div>
</div>
<div id="goods"></div>
</div>
<div class="footer">
选中<span id="count">0</span>件商品,共计 <span id="amount">0</span> 元
<a href="javascript:;" class="r" id="delall">清空购物车</a>
</div>
</div>
</body>
</html>