localStorage 购物车案例

localStorage 购物车案例 两个页面 实时渲染页面
css:bootstrap
开源:

添加商品页面

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>添加商品页面</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
</head>

<body>
    <div class="container">
        <form action="">
            <legend>
                <h1 class="text-center">商品添加页面</h1>
            </legend>
            <div class="form-group">
                <label for=""><h3>商品名称</h3></label>
                <input type="text" id="pro_name" class="form-control" />
            </div>
            <div class="form-group">
                <label for=""><h3>商品价格</h3></label>
                <input type="number" id="pro_price" class="form-control" />
            </div>
            <div class="form-group">
                <label for=""><h3>商品数量</h3></label>
                <input type="number" id="pro_num" class="form-control" />
            </div>
            <div class="form-group">
                <label for=""><h3>商品类别</h3></label>
                <select name="" id="pro_type">
            <option value="0">---请选择商品分类---</option>
            <option value="1">---水果---</option>
            <option value="2">---熟食---</option>
            <option value="3">---小吃---</option>
            <option value="4">---饮料---</option>
        </select>
            </div>
            <div>
                <input type="button" value="添加商品" class="btn btn-primary" id="add_pro">
            </div>
        </form>
    </div>
</body>
<script>
    let $ = ele => ele[0] === '#' ? document.querySelector(ele) : document.querySelectorAll(ele)
    let c = ele => document.createElement(ele)


    $("#add_pro").onclick = function() {
        //初始化
        if (!localStorage.getItem("shop_data")) {
            localStorage.setItem("shop_data", "[]")
        }
        //收集数据
        let obj = {
                pro_id: new Date().getTime(),
                pro_name: $("#pro_name").value,
                pro_price: $("#pro_price").value,
                pro_num: $("#pro_num").value,
                pro_type: $("#pro_type").value
            }
            //取出数据,为字符串型
        let str = localStorage.getItem("shop_data")
            //将数据转换为数组对象
        let arr = JSON.parse(str)
            //将对象添加入数组
        arr.push(obj)
            //将数组转化为字符串然后在存入localstorage
        localStorage.setItem("shop_data", JSON.stringify(arr))
    }
</script>
</html>

展示商品页面

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>展示商品页面</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
</head>

<body>
    <div class="container">
        <table class="table">
            <caption>
                <h1 class="text-center">购物车展示</h1>
            </caption>
            <thead>
                <tr>
                    <th colspan="6">
                        <select name="" id="pro_type">
                    <option value="0">---全部分类---</option>
                    <option value="1">---水果---</option>
                    <option value="2">---熟食---</option>
                    <option value="3">---小吃---</option>
                    <option value="4">---饮料---</option>
                </select>
                        <input type="button" value="价格升序" class="btn btn-warning" id="price_up">
                        <input type="button" value="价格降序" class="btn btn-success" id="price_down">
                    </th>
                </tr>
                <tr>
                    <th>商品类型</th>
                    <th>商品名称</th>
                    <th>商品价格</th>
                    <th>商品数量</th>
                    <th>商品小计</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody id="tb">

            </tbody>
        </table>
    </div>
</body>
<script>
    let $ = ele => ele[0] === '#' ? document.querySelector(ele) : document.querySelectorAll(ele)
    let c = ele => document.createElement(ele)
        //定义一个处理类型的函数
    let show_type = (num) => {
            let s = ""
            switch (num) {
                case 1:
                    s = "水果"
                    break;
                case 2:
                    s = "熟食"
                    break;
                case 3:
                    s = "小吃"
                    break;
                case 4:
                    s = "饮料"
                    break;
            }
            return s
        }
        //添加一个渲染页面的函数
    let create_tr = (arr) => {
        //先清空数据
        $("#tb").innerHTML = ""
        for (let obj of arr) {
            //创建行
            let tr = c("tr")
                //创建列
            let td_pro_type = c("td")
            let td_pro_name = c("td")
            let td_pro_price = c("td")
            let td_pro_num = c("td")
            let td_total_price = c("td")
            let td_ope = c("td")
                //添加内容
            td_pro_type.innerHTML = show_type(+obj.pro_type)
            td_pro_name.innerHTML = obj.pro_name
            td_pro_price.innerHTML = obj.pro_price
            td_pro_num.innerHTML = `
            <input type="button" class="btn btn-danger btn.decrement" value="-" data-pro_id="${obj.pro_id}">
            <input type="text" value="${obj.pro_num}" readonly>
            <input type="button" class="btn btn-success btn-increment" value="+" data-pro_id="${obj.pro_id}">
            `
            td_total_price.innerHTML = obj.pro_price * obj.pro_num
                //将td添加入tr中
            tr.appendChild(td_pro_type)
            tr.appendChild(td_pro_name)
            tr.appendChild(td_pro_price)
            tr.appendChild(td_pro_num)
            tr.appendChild(td_total_price)
            tr.appendChild(td_ope)
                //将tr添加入tb中
            $("#tb").appendChild(tr)
                //删除按钮
            let del_btn = c("input")
            del_btn.type = "button"
            del_btn.value = "删除"
            del_btn.className = "btn btn-danger"
                //将删除按钮添加入td中
            td_ope.appendChild(del_btn)
                //删除按钮事件
            del_btn.onclick = function() {
                //取出数据
                let arr = JSON.parse(localStorage.getItem("shop_data"))
                    //修改数据 
                arr = arr.filter(item => item.pro_id !== obj.pro_id)
                    // 将数据放回去
                localStorage.setItem("shop_data", JSON.stringify(arr))
                    // 渲染页面
                create_tr(JSON.parse(localStorage.getItem("shop_data")))

            }
        }
    }
    create_tr(JSON.parse(localStorage.getItem("shop_data")))

    //监听事件,实时渲染页面
    window.onstorage = function() {
            create_tr(JSON.parse(localStorage.getItem("shop_data")))
        }
        //分类 给select添加事件
    $("#pro_type").oninput = function() {
            if (this.value === '0') {
                create_tr(JSON.parse(localStorage.getItem("shop_data")))
                return
            } else {
                create_tr(JSON.parse(localStorage.getItem("shop_data")).filter(item => item.pro_type === this.value))
            }
        }
        //升序
    $("#price_up").onclick = function() {
            let arr = JSON.parse(localStorage.getItem("shop_data"))
            arr.sort((n1, n2) => n1.pro_price - n2.pro_price)
            create_tr(arr)
        }
        //降序
    $("#price_down").onclick = function() {
            let arr = JSON.parse(localStorage.getItem("shop_data"))
            arr.sort((n1, n2) => n2.pro_price - n1.pro_price)
            create_tr(arr)
        }
        //加减按钮事件
    $("#tb").onclick = function(e) {
        if (e.target.value === '-') {
        //将id取出来,转换为数值型
            let id = +e.target.dataset.pro_id
            //将数据取出来
            let arr = JSON.parse(localStorage.getItem("shop_data"))
            //遍历数组
            arr.forEach(item => {
                if (+item.pro_id === id) {
                    if (item.pro_num <= 1) {
                        alert("不可以再减啦!")
                        return
                    } else
                        item.pro_num--
                }
            })
            //将数据存入localstorage
            localStorage.setItem("shop_data", JSON.stringify(arr))
                //实时更新数据
            create_tr(JSON.parse(localStorage.getItem("shop_data")))
        } else {
            let id = +e.target.dataset.pro_id
            let arr = JSON.parse(localStorage.getItem("shop_data"))
            arr.forEach(item => {
                if (+item.pro_id === id) {
                    item.pro_num++
                }
            })
            localStorage.setItem("shop_data", JSON.stringify(arr))
                //实时更新数据
            create_tr(JSON.parse(localStorage.getItem("shop_data")))
        }
    }
</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值