简易购物车(HTML/CSS/JS)

实现功能 

1.能够新增减少商品数量

2.能够新增商品种类

3.能够计算商品总价,总价随着商品数量变化而变化

整体思路

1.先写一个初始商品,包含名称,单价,描述,然后将其隐藏

2.克隆初始商品,重置其名称,单价,描述

3.点击新增,将克隆的商品添加进去

补充

1.一定要为初始商品添加事件监听器,否则初始商品无法+-del

2.每一步操作都要更新总价

完整代码

shopcar.html

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title>购物车</title>
	<link rel="stylesheet" type="text/css" href="shopcar.css">
</head>

<body>
	<!-- 整体框架 -->
	<div id="frame">
		<div id="list">
			<!-- 单个元素样式案例 -->
			<div class="unit">
				<img src="./img/img1.jpg" alt="">
				<div>
					<p>鲜花</p>
					<p>单价<b class="jiage">10</b>元</p>
					<p>简介:平平无奇的一朵鲜花</p>
					
				</div>
				<div>
					<div class="add">+</div>
					<div class="geshu">0</div>
					<div class="sub">-</div>
					<div class="delete">del</div>
				</div>
			</div>
		</div>
		<div id="set">
			名称:<input type="text" id="name">
			单价:<input type="text" id="price">
			描述:<input type="text" id="description">
			<!-- 
            添加图片:<input type="file" id="imageUpload"> 
            -->
			<input id="tijiao" type="button" value="新增">
			<p>
			<h1>总价:<b id="sum">0</b></h1>
			</p>
		</div>
	</div>
	<script src="shopcar.js"></script>
	
</body>

</html>

shopcar.js

// 在页面加载完成后隐藏初始商品
document.addEventListener('DOMContentLoaded', function () {
    var initialProduct = document.querySelector(".unit");
    initialProduct.style.display = 'none';
});

// 增加商品函数
function addProductEventListener(newUnit) {
    var geshu = 0;

    var addButton = newUnit.querySelector(".add");
    var subButton = newUnit.querySelector(".sub");
    var deleButton = newUnit.querySelector(".delete");
    var geshuDisplay = newUnit.querySelector(".geshu");
    var unitPrice = parseFloat(newUnit.querySelector(".jiage").textContent);

    //------➕增加按钮
    addButton.addEventListener('click', function () {
        geshu++;
        // 更新个数展示区域的数字
        geshuDisplay.textContent = geshu;
        // 更新总价
        sum.textContent = zongjia();
    });

    //------➖减少按钮
    subButton.addEventListener('click', function () {
        if (geshu > 0) {
            geshu--;
            geshuDisplay.textContent = geshu;
            sum.textContent = zongjia();
        }
        else {
            alert("已经是0,不能再减少了!");
        }
    });

    //------del删除按钮
    deleButton.addEventListener('click', function () {
        newUnit.remove();
        // 更新总价
        sum.textContent = zongjia();
    });

    //------总价
    sum.textContent = zongjia();
    function zongjia() {
        var zj = 0;
        // 遍历所有的商品
        var unitDisplay = document.querySelectorAll(".unit");
        unitDisplay.forEach(function (unit) {
            var jiage = parseFloat(unit.querySelector(".jiage").textContent);
            var geshu = parseInt(unit.querySelector(".geshu").textContent);
            // 计算总价=个数*价格
            zj += geshu * jiage;
        });
        return zj;
    }
}

// 调用增加商品函数
// 一定要为初始商品添加事件监听器,否则初始商品无法+-del
addProductEventListener(document.querySelector(".unit"));

//------新增商品种类
// 提交按钮
var tijiaoButton = document.querySelector("#tijiao")
tijiaoButton.addEventListener('click', function () {
    var name = document.querySelector("#name").value;
    var price = document.querySelector("#price").value;
    var description = document.querySelector("#description").value;
    // var imageUpload = document.querySelector("#imageUpload").files[0]; // 获取上传的图片文件

    // 克隆之前存在的那个商品
    var unitclone = document.querySelector(".unit").cloneNode(true);

    // 显示克隆的商品
    unitclone.style.display = 'inline-block';
    unitclone.querySelector("p").textContent = name;
    unitclone.querySelector(".jiage").textContent = price;
    unitclone.querySelector(".geshu").textContent = 0;//一定要个数归0,否则会克隆初始商品的个数
    unitclone.querySelector("p:nth-of-type(3)").textContent = "描述" + description;

    // 将新克隆的商品元素添加到页面中
    document.querySelector("#list").appendChild(unitclone);

    // 为新增商品添加事件监听器
    addProductEventListener(unitclone);

    // 更新总价
    sum.textContent = zongjia();

});

shopcar.css

* {
    margin: 0px;
    padding: 0px;

    text-align: center;
}

/* 整个大框框 */
#frame {
    width: 700px;
    height: 500px;
    border: 2px solid black;

    /* 居中 */
    top: 50%;
    left: 50%;
    position: absolute;
    transform: translate(-50%, -50%);
}


/* 底部的商品列表 */
#list {
    width: 100%;
    height: 430px;
    border-bottom: 1px solid black;
    overflow-y: scroll;
}

/* 单个商品样式 */
.unit {
    width: 90%;
    height: 90px;
    margin: 10px auto;
    border: 1px solid black;
}

/* 放置商品图片 */
.unit>img {
    width: 20%;
    height: 100%;

    float: left;
}

/* 放置商品信息和按钮 */
.unit>div {
    width: 40%;
    height: 100%;

    float: left;
}

/* 选择所有带有class为unit的元素
    的最后一个直接子div内的所有直接子div
    就是➕➖ */
.unit>div:last-child>div {
    width: 25%;
    height: 100%;

    float: left;
    /* 设置行高居中 */
    font-size: 30px;
    color: #ff8f8f;
    line-height: 270%;
}

/* 悬停变色,让这个元素看上去更像按钮 */
.unit>div:last-child>div:hover {
    font-size: 30px;
    color: #ff0000;
}

/* 设置面板 */
#set {
    width: 100%;
    height: 100px;
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简易购物车静态页面的示例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>购物车</title> <style> /* CSS样式 */ .container { width: 80%; margin: 0 auto; } .item { display: flex; align-items: center; margin-bottom: 20px; } .item img { width: 100px; height: 100px; margin-right: 20px; } .item p { margin: 0; } .total { text-align: right; margin-top: 20px; font-size: 20px; } </style> </head> <body> <div class="container"> <h1>我的购物车</h1> <div class="item"> <img src="item1.jpg" alt="商品1"> <p>商品名称:商品1</p> <p>价格:$100</p> </div> <div class="item"> <img src="item2.jpg" alt="商品2"> <p>商品名称:商品2</p> <p>价格:$150</p> </div> <div class="total"> 总价:$250 </div> </div> <script> // JavaScript逻辑 // 这里可以添加一些交互逻辑,比如点击商品可以跳转到商品详情页面等 </script> </body> </html> ``` 以上是一个简单的HTML静态页面,通过CSS进行样式的设置,再通过JavaScript添加一些交互逻辑。这个页面展示了一个简单的购物车,包括商品图片、商品名称、价格以及总价。用户可以在这个页面上查看已选商品,并且可以通过JavaScript添加一些交互逻辑,比如点击商品可以跳转到商品详情页面等。这样的静态页面可以作为购物车的基础页面,之后可以通过后端逻辑实现购物车的添加、删除、结算等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值