首页 前端知识 简易购物车(HTML/CSS/JS)

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

2024-06-07 12:06:01 前端知识 前端哥 834 347 我要收藏
实现功能 

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;
}

转载请注明出处或者链接地址:https://www.qianduange.cn//article/11206.html
标签
windows
评论
发布的文章

1.10 Unity中的数据存储 JSON

2024-06-13 21:06:30

JSON 数据格式化方法

2024-06-13 21:06:26

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!