javascript详解实现购物车完整功能(附效果图,完整代码)

前言:
我们肯定都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪件商品,就会加入购物车中,最后结算。购物车这一功能,方便消费者对商品进行管理,可以添加商品,删除商品,选中购物车中的某一项或几项商品,最后商品总价也会随着消费者的操作随着变化。

站在用户的角度思考问题,与客户深入沟通,找到红旗网站设计与红旗网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、做网站、企业官网、英文网站、手机端网站、网站推广、空间域名、虚拟主机、企业邮箱。业务覆盖红旗地区。

一、基本功能

  1. 添加商品到购物车
  2. 移出购物车中的商品
  3. 选中某个商品,动态更新结算价格
  4. 商品数量的增加与减少
  5. 全选、反选,动态更新结算价格

二、效果图

1.首页

包含商品列表,加入购物车按钮,动态添加商品到购物车
javascript详解实现购物车完整功能(附效果图,完整代码)

2.添加购物车

点击按钮,实现加入购物车功能,商品移入购物车列表项
javascript详解实现购物车完整功能(附效果图,完整代码)

3.单选或多选商品

点击左侧选择框,选择商品,并动态更新总价
javascript详解实现购物车完整功能(附效果图,完整代码)

4.全选或反选

点击上方左侧按钮,实现全选,反选功能,并动态更新价格
javascript详解实现购物车完整功能(附效果图,完整代码)
javascript详解实现购物车完整功能(附效果图,完整代码)

5.删除购物车

点击右侧删除按钮,出现提示框,点击确定,删除购物车的商品,并动态更新价格
javascript详解实现购物车完整功能(附效果图,完整代码)
javascript详解实现购物车完整功能(附效果图,完整代码)

三、实现思路

1、用html实现内容
部分关键代码如下,完整代码见末尾

            
  全选
商品名称
单价
数量
小计
操作
去结算
合计:0

买购物车中商品的人还买了

2、用css修饰外观

3、用JavaScript(jq)设计动态效果。

第一步:首先是进行html页面的设计,我用一个大的div(id=box)将所有商品包含,商品列表中我用了ul li实现,接着采用克隆的方式,显示所有商品列表,具体实现代码如下

买购物车中商品的人还买了

window.onload = function() {
                var aData = [{
                        "imgUrl": "img/03-car-01.png",
                        "proName": " 小米手环4 NFC版 ",
                        "proPrice": "229",
                        "proComm": "1"
                    },
                    {
                        "imgUrl": "img/03-car-02.png",
                        "proName": " Redmi AirDots真无线蓝牙耳机 ",
                        "proPrice": "99.9",
                        "proComm": "9.7"
                    },
                    {
                        "imgUrl": "img/03-car-03.png",
                        "proName": " 米家蓝牙温湿度计 ",
                        "proPrice": "65",
                        "proComm": "1.3"
                    },
                    {
                        "imgUrl": "img/03-car-04.png",
                        "proName": " 小米小爱智能闹钟 ",
                        "proPrice": "149",
                        "proComm": "1.1"
                    },
                    {
                        "imgUrl": "img/03-car-05.png",
                        "proName": "米家电子温湿度计Pro  ",
                        "proPrice": "750",
                        "proComm": "0.3"
                    },
                    {
                        "imgUrl": "img/03-car-06.png",
                        "proName": " 小米手环3 NFC版 Pro  ",
                        "proPrice": "199",
                        "proComm": "3.3"
                    },
                    {
                        "imgUrl": "img/03-car-07.png",
                        "proName": " 小米手环3 / 4 通用腕带",
                        "proPrice": "19.9",
                        "proComm": "1.2"
                    },
                    {
                        "imgUrl": "img/03-car-08.png",
                        "proName": "  米家温湿度传感器 ",
                        "proPrice": "45",
                        "proComm": "0.6"
                    },
                    {
                        "imgUrl": "img/03-car-09.png",
                        "proName": "  米家电子温湿度计Pro 3个装  ",
                        "proPrice": "207",
                        "proComm": "0.3"
                    },
                    {
                        "imgUrl": "img/03-car-10.png",
                        "proName": " 小米手环3 ",
                        "proPrice": "199",
                        "proComm": "7.2"
                    }
                ];
                var oBox = document.getElementById("box");//商品列表所在的div
                var oUl = document.getElementsByTagName("ul")[0];//商品列表所在的ul
                //遍历所有商品
                for (var i = 0; i < aData.length; i++) {
                    var oLi = document.createElement("li");
                    var data = aData[i];
                    oLi.innerHTML += '
'; oLi.innerHTML += '

' + data["proName"] + '

'; oLi.innerHTML += '

' + data["proPrice"] + '元

'; oLi.innerHTML += '

' + data["proComm"] + '万人好评

'; oLi.innerHTML += '
加入购物车
'; oUl.appendChild(oLi); }

第二步:给添加购物车按钮添加事件

    var aBtn = getClass(oBox, "add_btn");//获取box下的所有添加购物车按钮
                var number = 0;//初始化商品数量
                for (var i = 0; i < aBtn.length; i++) {
                    number++;
                    aBtn[i].index = i;
                    aBtn[i].onclick = function() {
                        var oDiv = document.createElement("div");
                        var data = aData[this.index];
                        oDiv.className = "row hid";
                        oDiv.innerHTML += '
'; oDiv.innerHTML += '
'; oDiv.innerHTML += '
' + data["proName"] + '
'; oDiv.innerHTML += '
' + data["proPrice"] + '元
'; oDiv.innerHTML +='
-
1
+
' oDiv.innerHTML += '
' + data["proPrice"] + '元
' oDiv.innerHTML += ''; oCar.appendChild(oDiv); } }

第三步:给商品数量的增加减少的按钮添加事件

//获取所有的数量加号按钮
var i_btn = document.getElementsByClassName("count_i");
                        for (var k = 0; k < i_btn.length; k++) {
                            i_btn[k].onclick = function() {
                                bt = this;
                                //获取小计节点
                                at = this.parentElement.parentElement.nextElementSibling;
                                //获取单价节点
                                pt = this.parentElement.parentElement.previousElementSibling;
                                //获取数量值
                                node = bt.parentNode.childNodes[1];
                                console.log(node);
                                num = node.innerText;
                                num = parseInt(num);
                                num++;
                                node.innerText = num;
                                //获取单价
                                price = pt.innerText;
                                price = price.substring(0, price.length - 1);
                                //计算小计值
                                at.innerText = price * num + "元";
                                //计算总计值
                                getAmount();
                            }
                        }
                        //获取所有的数量减号按钮
                        var d_btn = document.getElementsByClassName("count_d");
                        for (k = 0; k < i_btn.length; k++) {
                            d_btn[k].onclick = function() {
                                bt = this;
                                //获取小计节点
                                at = this.parentElement.parentElement.nextElementSibling;
                                //获取单价节点
                                pt = this.parentElement.parentElement.previousElementSibling;
                                //获取c_num节点
                                node = bt.parentNode.childNodes[1];
                                num = node.innerText;
                                num = parseInt(num);
                                if (num > 1) {
                                    num--;
                                }
                                node.innerText = num;
                                //获取单价
                                price = pt.innerText;
                                price = price.substring(0, price.length - 1);
                                //计算小计值     
                                at.innerText = price * num + "元";
                                //计算总计值
                                getAmount();
                            }
                        }

第四步:删除某个商品

//获取删除按钮,并添加事件
var delBtn = oDiv.lastChild.getElementsByTagName("a")[0];
                        delBtn.onclick = function() {
                            var result = confirm("确定删除吗?");
                            if (result) {
                                oCar.removeChild(oDiv);
                                number--;
                                getAmount();
                            }
                        }

第五步:全选
通过类名的添加与删除,实现选中和非选中功能

var index = false;
            function checkAll() {
                var choose = document.getElementById("car").getElementsByTagName("i");
                // console.log(choose);
                if (choose.length != 1) {
                    for (i = 1; i < choose.length; i++) {
                        if (!index) {
                            choose[0].classList.add("i_acity2")
                            choose[i].classList.add("i_acity");
                        } else {
                            choose[i].classList.remove("i_acity");
                            choose[0].classList.remove("i_acity2")
                        }
                    }
                    index = !index;
                }
                getAmount();
            }

第六步:单选
选中某个或多个商品,首先判断选中状态,然后通过类名的添加与删除,实现选中和非选中功能,

//获取选中框
var check = oDiv.firstChild.getElementsByTagName("i")[0];
                        check.onclick = function() {
                            // console.log(check.className);
                            if (check.className == "i_check i_acity") {
                                check.classList.remove("i_acity");

                            } else {
                                check.classList.add("i_acity");
                            }
                            getAmount();
                        }

第七步:动态更新总价

            //进行价格合计
            function getAmount() {
                //获取选中的选择框
                ns = document.getElementsByClassName("i_acity");
                //初始化总价
                sum = 0;
                //选中框
                document.getElementById("price_num").innerText = sum;
                for (y = 0; y < ns.length; y++) {
                    //小计
                    amount_info = ns[y].parentElement.parentElement.lastElementChild.previousElementSibling;
                    num = parseInt(amount_info.innerText);
                    sum += num;
                    document.getElementById("price_num").innerText = sum;
                }
            }

四、完整代码实现

注意:图片地址请自行修改
在线演示地址:点击进入在线演示
附上下载地址,可以直接运行:点击进入下载地址



    
        
        
        我的购物车

        
    
    
        
        
        
            

我的购物车

  全选
商品名称
单价
数量
小计
操作
去结算
合计:0

买购物车中商品的人还买了

感谢您的阅读,有什么问题或者意见欢迎您提出


本文名称:javascript详解实现购物车完整功能(附效果图,完整代码)
文章分享:http://pwwzsj.com/article/jhocgd.html