js原生代码实现购物车

一、效果展示

双击商品,如果购物车没有该商品,添加到购物车中,如果有该商品数量加1。

全选全不选

刷新后数据不会消失

二、代码展示

1、基础框架

.screen里面展示商品,.cart购物车,商品信息添加到tbody中。

    <main>
        <div class="screen">

        </div>
        <div class="cart">
            <table>
                <thead>
                    <tr>
                        <th>
                            <input type="checkbox" id="all">
                            全选
                        </th>
                        <th>商品图片</th>
                        <th>商品名称</th>
                        <th>商品价格</th>
                        <th>商品数量</th>
                    </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
        </div>
    </main>

2、CSS样式

    * {
        margin: 0;
        padding: 0;
    }

    main {
        width: 1200px;
        margin: 40px auto;
    }

    main::after {
        content: "";
        display: block;
        clear: both;
    }

    .screen,
    .cart {
        float: left;
        border: 1px solid black;
        width: 600px;
        height: 300px;
        box-sizing: border-box;
    }

    ul {
        padding: 3px;
    }

    .screen li {
        width: 197px;
        height: 146px;
        border: 1px solid black;
        box-sizing: border-box;
        padding-top: 5px;
        float: left;
        text-align: center;
    }

    td {
        text-align: center;
    }

    td>img {
        height: 40px;
    }

    .screen img {
        height: 93px;
    }

    .red {
        color: red;
        font-weight: bold;
    }

    th {
        width: 115px;
    }

    .cart>thead {
        height: 30px;
    }

    li {
        list-style: none;
    }

3、JS代码

    var screen = document.querySelector(".screen");
    var cart = document.querySelector(".cart tbody");
    var shoppingCart = [];
    // 取出保存的数据
    var shoppingCart = localStorage.getItem("key") ? JSON.parse(localStorage.getItem("key")) : [];
    // 将取出的数据渲染到购物车内
    shoppingCart.forEach(function (item) {
        var tr = document.createElement("tr");
        var td1 = document.createElement("td");
        var td2 = document.createElement("td");
        var td3 = document.createElement("td");
        var td4 = document.createElement("td");
        var td5 = document.createElement("td");
        var img = document.createElement("img");
        var input = document.createElement("input");
        input.type = "checkbox";
        img.src = item.pictrueSrc;
        td1.append(input);
        input.className = "item"
        td2.append(img);
        td3.innerText = item.name;
        td4.innerText = item.money;
        td5.innerText = item.num;
        td5.className = "number"
        tr.append(td1);
        tr.append(td2);
        tr.append(td3);
        tr.append(td4);
        tr.append(td5);
        cart.append(tr);
    })
    // 创建一个构造函数里面存入商品信息
    function phone(pictrueSrc, name, money, num) {
        this.pictrueSrc = pictrueSrc;
        this.name = name;
        this.money = money;
        this.num = num;
    }
    var honorv10 = new phone("./images/honorv10.png", "荣耀v10", "2799", 1);
    var iphone8 = new phone("./images/iphone8.png", "苹果8", "5888", 1);
    var xiaomiMIX2 = new phone("./images/xiaomiMIX2.png", "小米MIX2", "3299", 1);
    var lenovo = new phone("./images/lenovo小新.png", "联想小新", "6299", 1);
    var Dell = new phone("./images/Dell.png", "戴尔笔记本", "5699", 1);
    var xiaomi = new phone("./images/xiaomi.png", "小米笔记本", "4999", 1);
    var wares = [honorv10, iphone8, xiaomiMIX2, lenovo, Dell, xiaomi];
    // 将商品信息渲染到页面上
    var ul = document.createElement("ul");
    wares.forEach(function (item) {
        var li = document.createElement("li");
        var p1 = document.createElement("p");
        var p2 = document.createElement("p");
        var img = document.createElement("img");
        img.src = item.pictrueSrc;
        p1.innerText = item.name;
        p2.innerText = item.money;
        p2.className = "red"
        li.append(img);
        li.append(p1);
        li.append(p2);
        ul.append(li);
    })
    screen.append(ul);
    list = document.querySelectorAll("li");
    var checkAll = document.getElementById("all");
    for (let i = 0; i < list.length; i++) {
        list[i].ondblclick = function () {
            var flag = true;
            if (!shoppingCart.length) {
                // 如果没有点击过执行点击渲染购物车
                flag = true;
            } else {
                for (j = 0; j < shoppingCart.length; j++) {
                    if (shoppingCart[j].name == wares[i].name) {
                        // 判断新数组内有点击的对象时,数量加1,不执行渲染购物车
                        var numberList = document.querySelectorAll(".number")
                        shoppingCart[j].num++;
                        numberList[j].innerText = shoppingCart[j].num;
                        flag = false;
                    }
                }
            }
            if (flag) {
                // 将点击的对象push到一个新数组
                shoppingCart.push(wares[i]);
                // 渲染购物车
                var tr = document.createElement("tr");
                var td1 = document.createElement("td");
                var td2 = document.createElement("td");
                var td3 = document.createElement("td");
                var td4 = document.createElement("td");
                var td5 = document.createElement("td");
                var img = document.createElement("img");
                var input = document.createElement("input");
                input.type = "checkbox";
                img.src = wares[i].pictrueSrc;
                td1.append(input);
                input.className = "item"
                td2.append(img);
                td3.innerText = wares[i].name;
                td4.innerText = wares[i].money;
                td5.innerText = wares[i].num;
                td5.className = "number";
                tr.append(td1);
                tr.append(td2);
                tr.append(td3);
                tr.append(td4);
                tr.append(td5);
                cart.append(tr);
            }
            localStorage.setItem("key", JSON.stringify(shoppingCart));
            var itemList = document.getElementsByClassName("item");
            // 全选全不选
            checkAll.onclick = function () {
                for (i = 0; i < itemList.length; i++) {
                    itemList[i].checked = this.checked;
                }
            }
            for (let j = 0; j < itemList.length; j++) {
                itemList[j].onclick = function () {
                    var flag1 = true;
                    for (let k = 0; k < itemList.length; k++) {
                        if (itemList[k].checked == false) {
                            flag1 = false;
                        }
                    }
                    checkAll.checked = flag1;
                }
            }
        }
    }
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值