原生JavaScript实现淘宝购物车核心逻辑
作者:微光时间:2026-10-21 20:09:57浏览:381
本文介绍如何使用原生JavaScript实现类似淘宝购物车的核心交互功能。通过监听加减按钮点击事件,动态更新单个商品数量与价格,并实时计算总数量、总金额及最贵商品价格。代码包含HTML结构、CSS样式及完整的JS逻辑,适合前端初学者学习DOM操作与事件处理。
功能需求概述
本文旨在通过原生JavaScript实现一个简易的淘宝购物车功能模块。
具体功能逻辑如下: 1. 点击“+”按钮时,单个商品的数量增加1,购物车总数量随之加1;同时单个商品的总价增加,购物车总金额也相应增加。 2. 点击“-”按钮时,单个商品的数量减1,购物车总数量随之减1;同时单个商品的总价减少,购物车总金额也相应减少。 需要注意的是,当某个商品的数量已为0时,继续点击“-”按钮,该商品数量保持为0,不会变为负数。 3. 界面需实时显示购物车的总金额、总数量,以及所有商品中单价最高的那个商品的价格。
以下是实现后的效果预览:

代码实现
接下来直接展示相关代码实现。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
*{padding:0;margin:0;}
#list,p{list-style:none;width:600px;margin:0 auto;}
#list li {width:600px;height:50px;line-height:50px;margin-top:20px;font-size:20px;}
#list li input{width:60px;height:40px;line-height:40px;}
.highlight{color:red;font-size:30px;font-weight:bold;}
</style>
<script>
window.onload = function () {
var oUl = $('list');
var totalNumber = $('totalNum');
var totalPrice = $('totalPrice');
var mostExpensive = $('mostExpensive');
var aLi = oUl.getElementsByTagName('li');
var maxPrice = [0];
for ( var i = 0; i < aLi.length; i++ ) {
price(aLi[i]);
}
function price(oLi) {
var aBtn = oLi.getElementsByTagName('input');
var oStrong = oLi.getElementsByTagName('strong')[0];
var oEm = oLi.getElementsByTagName('em')[0];
var oSpan = oLi.getElementsByTagName('span')[0];
aBtn[0].onclick = function () {
var num = Number(oStrong.innerHTML);
var price = parseFloat(oEm.innerHTML);
var numbers = Number(totalNumber.innerHTML);
var prices = parseFloat(totalPrice.innerHTML);
num--;
if (num === 0) {
// 如果该商品数量为0,,那么就得把它的价格从价格表中清除
var index = maxPrice.indexOf(price);
if (index > -1) maxPrice.splice(index, 1);
} else if (num < 0) {
num = 0;
return;
}
numbers--;
oStrong.innerHTML = num;
oSpan.innerHTML = num * price + '元';
totalNumber.innerHTML = numbers;
totalPrice.innerHTML = prices - (num + 1) * price;
mostExpensive.innerHTML = maxPrice[0];
}
aBtn[1].onclick = function () {
var num = Number(oStrong.innerHTML);
var price = parseFloat(oEm.innerHTML);
var numbers = Number(totalNumber.innerHTML);
var prices = parseFloat(totalPrice.innerHTML);
num++;
numbers++;
if (maxPrice.indexOf(price) < 0) {
maxPrice.push(price)
maxPrice.sort(function (a,b) {return b - a});
}
oStrong.innerHTML = num;
oSpan.innerHTML = num * price + '元';
totalNumber.innerHTML = numbers;
totalPrice.innerHTML = prices + num * price;
mostExpensive.innerHTML = maxPrice[0];
}
}
function $(id) {return document.getElementById(id);}
}
</script>
</head>
<body>
<ul id="list">
<li>
<input type="button" value="-" />
<strong>0</strong>
<input type="button" value="+" />
单价:<em>12.5元</em>
小计:<span class="highlight">0元</span>
</li>
<li>
<input type="button" value="-" />
<strong>0</strong>
<input type="button" value="+" />
单价:<em>10.5元</em>
小计:<span class="highlight">0元</span>
</li>
<li>
<input type="button" value="-" />
<strong>0</strong>
<input type="button" value="+" />
单价:<em>8.5元</em>
小计:<span class="highlight">0元</span>
</li>
<li>
<input type="button" value="-" />
<strong>0</strong>
<input type="button" value="+" />
单价:<em>8元</em>
小计:<span class="highlight">0元</span>
</li>
<li>
<input type="button" value="-" />
<strong>0</strong>
<input type="button" value="+" />
单价:<em>14.5元</em>
小计:<span class="highlight">0元</span>
</li>
</ul>
<p>
商品合计共:<span class="highlight" id="totalNum">0</span>件,
共花费了:<span class="highlight" id="totalPrice">0</span>元<br />
其中最贵的商品单是:<span class="highlight" id="mostExpensive">0</span>元
</p>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
作者最新文章
JavaScript零基础入门:从环境搭建到运行第一段代码
2026-11-05 15:29:58
HTML链接中javascript:void(0)的作用及现代替代方案
2026-11-05 10:07:47
在线调试 JS 时怎么引入 jQuery 或 Vue 等第三方库
2026-11-05 08:53:56
原生JavaScript实现简易颜色选择器原理与代码
2026-11-03 23:22:19
JS原生表单序列化:FormData与URLSearchParams用法详解
2026-11-03 23:13:21
