京东购物车

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    *{
        margin: 0px;
        padding: 0px;
    }
    .box{
        width: 1000px;
        margin: 50px auto;
    }
    .header ul,
    .content ul{
        display: flex;
        justify-content: space-around;
        align-items: center;
        list-style: none;
        border-bottom: 1px dashed #666;
        padding-bottom: 20px;
    }
    .content ul{
        padding-left: 10px;
    }
    .content ul li img{
        width: 150px;
        height: 120px;
    }
    .content ul li button{
        padding: 2px 5px;
    }
    .footer{
        margin-top: 20px;
    }
    .footer ul{
        list-style: none;
        display: flex;
        justify-content: space-around;
        margin-bottom: 15px;
        border-bottom: 1px dashed #666;
        padding-bottom: 20px;
    }
    .footer ul li{
        width: 150px;
        height: 215px;
        text-align: center;
        border: 1px solid #000;
    }
    .footer ul li img{
        width: 150px;
        height: 120px;
    }
    .footer ul li p{
        margin: 5px 0px;
    }
    .footer button{
        padding: 2px 5px;
    }
</style>
<body>
<div class="box">
    <div class="header">
        <ul>
            <li>
                <input type="checkbox" name="selectAll">
                全选
            </li>
            <li>商品图片</li>
            <li>数量</li>
            <li>单价</li>
            <li>商品名称</li>
            <li>小计</li>
            <li>操作</li>
        </ul>
    </div>
    <div class="content">
        <ul>
            <li>
                <input type="checkbox" name="selectOne"> 
            </li>
            <li>
                <img src="../7/img/1.jpg" alt="">
            </li>
            <li>
                <button>-</button>
                <button>1</button>
                <button>+</button>
            </li>
            <li><span>2500.00</span>
            </li>
            <li>卡西欧相机</li>
            <li>¥<span>2500.00</span></li>
            <li>
                <button>删除</button>
            </li>
        </ul>
        <ul>
            <li>
                <input type="checkbox" name="selectOne"> 
            </li>
            <li>
                <img src="../7/img/2.jpg" alt="">
            </li>
            <li>
                <button>-</button>
                <button>1</button>
                <button>+</button>
            </li>
            <li><span>2800.00</span>
            </li>
            <li>卡西欧相机</li>
            <li>¥<span>2800.00</span></li>
            <li>
                <button>删除</button>
            </li>
        </ul>
        <ul>
            <li>
                <input type="checkbox" name="selectOne"> 
            </li>
            <li>
                <img src="../7/img/3.jpg" alt="">
            </li>
            <li>
                <button>-</button>
                <button>1</button>
                <button>+</button>
            </li>
            <li><span>3300.00</span>
            </li>
            <li>索尼相机</li>
            <li>¥<span>3300.00</span></li>
            <li>
                <button>删除</button>
            </li>
        </ul>
    </div>
    <div class="footer">
        <ul>
            <li>
                <img src="../7/img/4.jpg" alt="">
                <h4>迷你相机</h4>
                <p>¥<span>3000.00</span></p>
                <button>加入购物车</button>
            </li>
            <li>
                <img src="../7/img/5.jpg" alt="">
                <h4>初级相机</h4>
                <p>¥<span>3800.00</span></p>
                <button>加入购物车</button>
            </li>
            <li>
                <img src="../7/img/6.jpg" alt="">
                <h4>中级相机</h4>
                <p>¥<span>5000.00</span></p>
                <button>加入购物车</button>
            </li>
            <li>
                <img src="../7/img/7.jpg" alt="">
                <h4>高级相机</h4>
                <p>¥<span>10000.00</span></p>
                <button>加入购物车</button>
            </li>
        </ul>
        <button>全删</button>
        <!-- <button>增加</button> -->
        店铺合计:¥
        <span>0.00</span>
        已选商品总计:¥
        <span>0.00</span>
    </div>
</div> 
</body>
<script src="../7/js/utils.js"></script>
<script>
//获取操作对象
var bigBox = document.querySelector('.box');
var selectAlls = document.querySelector('[name="selectAll"]');
// getelmentsByName():获取页面中name属性值为"selectOne"的所有元素,返回一个伪数组
var selectOnes = document.getElementsByName('selectOne');
var content = document.querySelector('.content');
//给大盒子添加点击事件
bigBox.onclick = function() {
    // 兼容写法
    var e = e || window.event
    //获取操作目标
    var tg = e.target || e.srcElement

    //全选
    if(tg.name === "selectAll") {
        //遍历所有单选框
        for(var i=0;i<selectOnes.length;i++) {
            //判断全选是否被选中    
            if(tg.checked) {
                selectOnes[i].checked = true
            } else {
                selectOnes[i].checked = false
            }
        }
        total2()
    }
    //单选
    if(tg.name === "selectOne") {
        radio()
        total2()
    }

    // 增加一行
    if(tg.innerHTML === "加入购物车") {
        console.log(121)
        // 获取当前商品中的信息
        // 获取当前按钮对象的父节点li中所有子节点对象
        var list = tg.parentNode.children
        //图片地址
        var imgurl = list[0].getAttribute('src')
        //商品名称
        var name1 = list[1].innerHTML
        // 商品价格
        var price1 = list[2].innerHTML

        //创建ul
        var newul = document.createElement('ul')
        //添加内容
        newul.innerHTML = `
        <li>
            <input type="checkbox" name="selectOne"> 
        </li>
        <li>
            <img src="${imgurl}" alt="">
        </li>
        <li>
            <button>-</button>
            <button>1</button>
            <button>+</button>
        </li>
        <li>
            ${price1}
        </li>
        <li>${name1}</li>
        <li>${price1}</li>
        <li>
            <button>删除</button>
        </li>
        `
        // 将创建好的ul插入内容区域
        content.appendChild(newul)
        radio() //调用函数
        total1()
        total2()
    }
    //删除一行
    if(tg.innerHTML === "删除") {
        tg.parentNode.parentNode.remove()
        radio()
        total1()
        total2()
    }
    //全删
    if(tg.innerHTML === "全删") {
        // 遍历所有选中框对象
        for(var i=0;i<selectOnes.length;i++) {
            //判断是否被选中
            if(selectOnes[i].checked) {
                selectOnes[i].parentNode.parentNode.remove()
                // 让下标自减 - 因为没删一个下标就往前走一位
                i--
            }
        }
        radio()
        total1()
        total2()
    }

    //添加数量
    if(tg.innerHTML === "+") {
        //获取到前面的标签 - 上一个兄弟节点 数量
        var num = tg.previousElementSibling.innerHTML
        //让数量自增
        num++
        // 将数量重新赋值给当前位置
        tg.previousElementSibling.innerHTML = num
        //获取单价 - 没选一件商品给单价累加
        //位置在+按钮的父节点的下一个兄弟节点最后的子元素
        var price = tg.parentNode.nextElementSibling.lastElementChild.innerHTML
        //计算小计 - 数量乘于单价即是商品总价格
        var sum = num * parseFloat(price)
        //把计算的小计结果赋值给小计
        tg.parentNode.parentNode.children[5].lastElementChild.innerHTML = sum.toFixed(2)//让小计保留两位小数

        total1()
        total2()
    }
    //减少数量
    if(tg.innerHTML === "-") {
        //获取到后面的标签 - 下一个兄弟节点 数量
        var num = tg.nextElementSibling.innerHTML
        //判断限制最小值和最大值
        if(num<=1) {
            //如果数量只有一件则等于1
            num = 1
        } else {
            // 否则数量自减
            num--
        }
        // 将数量重新赋值给当前位置的数量
        tg.nextElementSibling.innerHTML = num
         //获取单价 - 没选一件商品给单价累加
        //位置在+按钮的父节点的下一个兄弟节点最后的子元素
        var price = tg.parentNode.nextElementSibling.lastElementChild.innerHTML
        //计算小计 - 数量乘于单价即是商品总价格
        var sum = num * parseFloat(price)
        //把计算的小计结果赋值给小计
        tg.parentNode.parentNode.children[5].lastElementChild.innerHTML = sum.toFixed(2)//让小计保留两位小数
    }

    total1()
    total2()
}
// 单选事件
function radio() {
    //方法一
    // for(var i=0;i<selectOnes.length;i++) {
    //     //给所有单选框添加点击事件
    //     selectOnes[i].onclick = function()  {
    //         //判断单选是否所有框都被选中 - 设置全选
    //         var arr = [].slice.call(selectOnes, 0)//将伪数组转换为数组才能使用数组方法
    //         //es6新增数组方法 - 判断所有元素是否满足条件
    //         var bool = arr.every(v => v.checked)
    //         selectAlls.checked = bool
    //     }
    // }

    // 方法二
    //计数器
    var k = 0
    //遍历所有单选框
    for(var i=0;i<selectOnes.length;i++) {
        // 判断当前选中框是否被选中
        if(selectOnes[i].checked) {
            k++
        }
    } 
    // 判断选中框被选中的次数是否等于单选框的长度
    if(k === selectOnes.length) {
        selectAlls.checked = true
    } else {
        selectAlls.checked = false
    }

}
// 获取底部操作对象
var footer = document.querySelector('.footer');
//店铺合计事件
function total1() {
    //获取所有商品 一个ul代表一个商品
    var uls = content.children  //内容区域的所有子元素即为商品
    //统计商品总计
    var sum = 0
    // 遍历所有商品 
    for(var i=0;i<uls.length;i++) {
        //获取小计  - 位置在ul第五个子元素的最后一个子元素
        var price = uls[i].children[5].lastElementChild.innerHTML
        //累计求和
        sum += parseFloat(price)
    }
    //将商品合计给店铺合计赋值
    footer.querySelectorAll('.footer>span')[0].innerHTML = sum
}
total1() //函数调用

//已选商品事件
function total2() {
    //获取所有商品
    var uls = content.children
    //统计
    var sum2 = 0
    // 遍历每个商品
    for(var i=0;i<uls.length;i++) {
        //获取当前商品选中框
        var input1 = uls[i].children[0].lastElementChild
        //判断当前选中框是否被选中
        if(input1.checked) {
            //获取小计
            var price = uls[i].children[5].lastElementChild.innerHTML
            //累计求和
            sum2+= parseFloat(price)
        }
        
    }
    //将商品合计给店铺合计赋值
    footer.querySelectorAll('.footer>span')[1].innerHTML = sum2
}
//函数调用
total2()
</script>
</html>

效果:

 

posted @ 2022-04-26 20:26  包歌  阅读(48)  评论(0)    收藏  举报