问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

淘宝购物车界面的js实现

发布网友 发布时间:2022-04-26 23:54

我来回答

4个回答

懂视网 时间:2022-05-14 22:53

这篇文章主要向大家推荐了一个原生js模拟淘宝购物车项目实战,包括商品的单选、全选、删除、修改数量、价格计算、数目计算、预览等功能的实现,感兴趣的小伙伴们可以参考一下

本文实例讲述了原生js模拟淘宝购物车实现代码。分享给大家供大家参考。具体如下:

通过JavaScript实现类似与淘宝的购物车效果,包括商品的单选、全选、删除、修改数量、价格计算、数目计算、预览等功能的实现。实现的效果图:

相应的代码:

shoppingCart.html

<!DOCTYPE html>
<html>
<head>
 <meta charset = "UTF-8">
 <title>JavaScript实现购物车项目实战</title>
 <link rel="stylesheet" type="text/css" href="./css/shoppingCart.css">
 <script type="text/javascript" src="./js/shoppingCart.js"></script>
</head>
<body>
 <table id="cartTable">
 <thead>
 <tr class="order_content">
 <th><input class="check_all check" type="checkbox"></input> 全选</th>
 <th>商品</th>
 <th>单价</th>
 <th>数量</th>
 <th>小计</th>
 <th>操作</th>
 </tr>

 </thead>
 <tbody>
 <tr class="order_content">
 <td class="check"><input class = "check_one check" type="checkbox"></input></td>
 <td class="goods"><img src="./imgs/apple6s.png"><span>Iphone 6S</span></td>
 <td class="price">5099.88</td>
 <td class="count">
 <span class="reduce">-</span>
 <input class="count_input" type="text" value="1"></input>
 <span class="add">+</span>
 </td>
 <td class="subtotle">5099.88</td>
 <td class="operation"><span class="delete">删除<span></td>
 </tr>
 <tr class="order_content">
 <td class="check"><input class = "check_one check" type="checkbox"></input></td>
 <td class="goods"><img src="./imgs/macbook.png"><span>MacBook Air</span></td>
 <td class="price">1099.99</td>
 <td class="count">
 <span class="reduce">-</span>
 <input class="count_input" type="text" value="1"></input>
 <span class="add">+</span>
 </td>
 <td class="subtotle">1099.99</td>
 <td class="operation"><span class="delete">删除<span></td>
 </tr>
 <tr class="order_content">
 <td class="check"><input class = "check_one check" type="checkbox"></input></td>
 <td class="goods"><img src="./imgs/ipadmini.png"><span>Ipad mini2 银16g WLAN7.9英寸</span></td>
 <td class="price">6599.00</td>
 <td class="count">
 <span class="reduce">-</span>
 <input class="count_input" type="text" value="1"></input>
 <span class="add">+</span>
 </td>
 <td class="subtotle">6599.00</td>
 <td class="operation"><span class="delete">删除<span></td>
 </tr>
 <tr>
 <td class="check"><input class = "check_one check" type="checkbox"></input></td>
 <td class="goods"><img src="./imgs/applewatch.png"><span>IWatch EXTS Min</span></td>
 <td class="price">9998.68</td>
 <td class="count">
 <span class="reduce">-</span>
 <input class="count_input" type="text" value="1"></input>
 <span class="add">+</span>
 </td>
 <td class="subtotle">9998.68</td>
 <td class="operation"><span class="delete">删除<span></td>
 </tr>
 </tbody>

 </table>
 <p class="slected view">
 <p id="selectedViewList" class="clearfix">
 <!-- <p><img src="./imgs/applewatch.png"><span>取消选择</span></p> -->
 </p>

 <span class="arrow">.<span>.</span></span>

 </p>
 <p id = "footer" class="footer"> 
 <label class="fl select_all" ><input class="check_all check" type="checkbox"> 全选</input></label>
 <a class="fl delete_all" id="deleteAll" href="javascript:;">删除</a>
 <p class="fr closing">结算</p>
 <p class="fr selected_totle">合计:¥ <span id="priceTotle">0.00</span> </p>
 <p class="fr selectAll" id="selected">已购商品
 <span id = "selectTotle">0</span>件
 <span class="arow up">+++</span>
 <span class="arow down">---</span>
 </p>


 </p>

</body>
</html>

shoppingCart.js

window.onload = function(){
 //低版本的IE浏览器不支持getElementByClassName方法,考虑兼容性,重写方法。
 if (!document.getElementByClassName) {
 document.getElementByClassName =function(cls){
 var ret = [];
 var clsElments = document.getElementsByTagName('*');
 for (var i = 0, len = clsElments.length; i < len; i++) {
 //考虑一个标签有多个class的情况,这里用正则表达式会好一点
 if (clsElments[i].className == cls 
 || (clsElments[i].className.indexOf(cls + " ") >= 0)
 || (clsElments[i].className.indexOf(" " + cls + " ") >= 0)
 || (clsElments[i].className.indexOf(" " + cls) >= 0)) 
 {
 ret.push(clsElments[i]);
 }
 }
 return ret;
 }

 }

 var cartTable = document.getElementById("cartTable");
 var tr = cartTable.children[1].rows; //table标签特有的属性,rows可以获得表格元素的所有tr行。
 var checkInput = document.getElementByClassName('check');//获得所有的单选框
 var checkAllInput = document.getElementByClassName('check_all');//获得所有的单选框
 var priceTotle = document.getElementById("priceTotle");//总价
 var selectTotle = document.getElementById("selectTotle");//已选商品
 var selected = document.getElementById("selected");
 var footer = document.getElementById("footer");//底部标签
 var selectedViewList = document.getElementById("selectedViewList");//底部标签
 var deleteAll = document.getElementById("deleteAll");



 //计算总价格和数量
 function getTotle(){
 var selectNum = 0;//数量
 var priceNum = 0;//价格
 var HTMLstr = ""; //缩略图的字符串拼接
 for (var i = 0,len = tr.length; i < len; i++) {
 if (tr[i].getElementsByTagName("input")[0].checked) {
 tr[i].className ="on";
 selectNum += parseInt(tr[i].getElementsByTagName("input")[1].value);
 priceNum += parseFloat(tr[i].cells[4].innerHTML);


 //拼接字符串显示已经选择的商品 
 HTMLstr += '<p><img src="'+ tr[i].getElementsByTagName('img')[0].src +'"><span class ="del" index ="'+ i +'">取消选择</span></p>';

 }
 else{
 tr[i].className = "";
 }
 }
 selectTotle.innerHTML = selectNum;
 priceTotle.innerHTML = priceNum.toFixed(2);//保留两位小数
 selectedViewList.innerHTML = HTMLstr;
 }

 //计算小计价格
 function getSubTotle(tr){
 var tds = tr.cells;
 var price = parseFloat(tds[2].innerHTML);
 var num = parseInt(tr.getElementsByTagName("input")[1].value);
 var subTotle = parseFloat(price * num).toFixed(2);
 tds[4].innerHTML = subTotle;
 }

 //复选框绑定单击事件
 for (var i = 0, len = checkInput.length; i < len; i++){
 checkInput[i].onclick =function (){
 //判断全选按钮,变更
 if (this.className == "check_all check") {
 for (var j = 0; j < len; j++){
 checkInput[j].checked = this.checked;
 }
 }
 if (this.checked == false) {
 for (var k = 0,len2 = checkAllInput.length; k < len2; k++){
 checkAllInput[k].checked = false;
 }
 }
 getTotle();
 }
 }



 //控制底部标签的显示
 selected.onclick = function(){
 if (footer.className == "footer") {
 footer.className == "footer show";
 } else {
 footer.className == "footer"; 
 }
 }


 //图片缩略图的取消选择按钮功能,e为事件对象
 selectedViewList.onclick = function(e){
 //兼容低版本的IE
/* if (e){
 e = e;
 }else{
 e = window.event;
 } */
 var e = e || window.event;
 var el = e.srcElement;
 if (el.className == "del") {
 var index = el.getAttribute("index");
 var input = tr[index].getElementsByTagName("input")[0];
 input.checked = false;
 input.onclick();
 }
 }

 //实现加减、删除操作。同样用事件代理的方法实现
 for (var i = 0, len3 = tr.length; i < len3; i++){
 tr[i].onclick = function(e){
 var e = e || window.event;
 var el = e.srcElement;
 var clsName = el.className;
 var input = this.getElementsByTagName("input")[1];
 var inputValue = parseInt(input.value);
 var reduce = this.getElementsByTagName("span")[1];
 switch (clsName){
 case "add":
 /*parseInt(inputValue) ++;*/
 input.value = inputValue + 1;
 reduce.innerHTML ="-";
 getSubTotle(this);
 break;
 case "reduce":
 if(inputValue >= 1){
 input.value = inputValue - 1;
 }else{
 reduce.innerHTML ="";
 }
 getSubTotle(this); 
 break;
 case "delete":
 var conf = confirm("确定删除这个商品?");
 if (conf) {
 this.parentNode.removeChild(this);
 }
 break;
 default:
 break;
 }
 getTotle();
 }
 //处理从手动输入商品数量
 tr[i].getElementsByTagName("input")[1].onkeyup = function(){
 var val = this.value;
 var tr = this.parentNode.parentNode;
 if (isNaN(val) || val < 0 ) {
 val = 1;
 }
 this.value = val;
 getSubTotle(tr);
 }
 }

 //全选删除
 deleteAll.onclick = function(){
 if (selectTotle.innerHTML !="0") {
 var conf = confirm("确定删除这些商品?");
 if (conf) {
 for (var i = 0, len = tr.length; i < len; i++) {
 var input = tr[i].getElementsByTagName("input")[0];
 if(input.checked){
 tr[i].parentNode.removeChild(tr[i]);
 }
 }
 }
 } 
 }
}

//取消选择--采用事件代理---放到父元素上。

shoppingCart.css

.count_input{
 width: 39px;
 height: 15px;
 line-height: 15px;
 border: 1px solid #aaa;
 color: #343434;
 text-align: center;
 padding: 4px 0;
 background-color: #fff;
}

span.add, span.reduce{
 height: 23px;
 width: 27px;
 border: 1px solid #e5e5e5;
 background: #f0f0f0;
 line-height: 23px;
 color: #444;
}
.closing{
 display: inline-block;
 width: 120px;
 height: 50px;
 line-height: 50px;
 background: #f40;
 text-align: center;
 font-family: 'Microsoft Yahei';
 font-size: 20px;
 -webkit-border-radius: 2px;
 -moz-border-radius: 2px;
 -ms-border-radius: 2px;
 border-radius: 2px;
 text-decoration: none;
 cursor: pointer;
}
.fr{
 float: right;
}
.selected_totle, .selectAll, .select_all, .delete_all{
 margin-top: 15px;
}
.footer{
 height: 50px;
 background: #e5e5e5;
 font-family: 'Microsoft Yahei';
}
#selectTotle, #priceTotle,.subtotle {
 color: #f40;
 font-weight: 700;
 font-size: 18px;
 font-family: tohoma,arial;
 padding: 5px;

}

热心网友 时间:2022-05-14 20:01

在网上找找吧
网上又很多源文件的,拿过来用就OK了。
找不到的话再来问吧

热心网友 时间:2022-05-14 21:19

购物车不只是js 啊
也包括后台的
不是那么容易做到的啊

热心网友 时间:2022-05-14 22:54

谷歌一下就可以了,,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
办公软件综合实训图书信息 什么是高分子材料与工程高分子材料与工程介绍 抖音超市普通人怎么入驻 抖音上的超市怎么入驻的 胃胀,有时还有点痛:还嗝气请问吃什么药, ...喝水也吐经常嗝气吃东西就胃胀气经常胃酸有时候胃特别热烧心的感觉... 它是指示代词还是人称代词 指示代词和人称代词语文 汉语指示代词和人称代词区别 长款的牛仔衣如何搭配最出彩? 黄忠后半生威震西南,前半生却默默无闻,会与哪个人有关? 网站购物车.js编码问题 黄忠是怎么死的呢? 请问js购物车代码加在哪才能实现当顾客看到加入购物车的按钮,点击后出现弹出框呢? 黄忠计夺天荡山故事梗概 用js实现购物车(用js cookie传递数据) 三国演义老将黄忠故事? 黄忠的小故事都有哪些 黄忠的早期经历,可能与太史慈交过手,二人胜负如何? 黄忠的早期经历,可能与太史慈交过手,二人胜负如何呢? 揭秘:三国中黄忠为刘备建立蜀国做出了哪些贡献 贷款利息增加对企业利润的影响 三年级作文,秋天的校园 秋天的校园作文200字(也写人,三年级)在那? 招商银行的信用卡电子账单导入不到支付宝里边去,请问大家有没有这种 下半年想去德国,关于银行流水对账单,我每次发工资都直接转到支付宝所以卡里是没钱的,这种情况会影响吗 怎样把银行卡里的账单记录导入到支付宝 支付宝绑定信用卡账单能提升芝麻分吗,支付宝绑定信用 支付宝银行卡账单不能删除要他何用,还不是添加烦恼,摆设 信用卡电子账单如何能导入支付宝里 黄忠怎么死的 死在哪 很奇怪的js,ajax的问题,关于添加到购物车及点击删除的,就类似京东商城... 黄忠为什么出名很晚?年轻的时候在干什么呢? 黄忠的一生 帮我改一个JS代码谢谢,购物车数字1的时候不能减到0,现在还能减到0_百 ... 黄忠出仕前的身世 求个js 购物车的js 就是点击列表 在另一边显示出来,并统计。 js对话框,我想做一个购物车结算功能,在结算的时候会花上几秒钟时间... 无刷新修改购物车产品数量得总金额的js代码 javascript 模仿淘宝购物车 js怎么获得购物车商品件数?将十分感谢!!! 当当网购物车javascript怎么写 点击一个购物网的加入购物车js没反应。 微波炉做蛋糕用什么火 为什么我用微波炉做的蛋糕中间会塌啊 · 用微波炉烤蛋糕 用微波炉烤蛋糕要用什么火候啊? 微波炉烘烤蛋糕塌了 微波炉烤蛋糕? 为什么微波炉做蛋糕会回缩?