JS实现购物车效果

文章目录

      • 1.效果
        • 1.效果图:
        • 2.功能描述
        • 3.目的的意义:
      • 2.代码部分:

1.效果

1.效果图:

JS实现购物车效果_第1张图片

2.功能描述

1.全选时,总价为商品价格和
2.反选时,总价为0
3.任意点击商品栏前的选中时,当所有商品前的选框选中时,
全选按钮变为选中,当商品前的任意一个选框未被选中时,
全选为未选中状态。
4.商品数量:点击+时,数量增加,单个商品总价随之变化
的同时,总价随之变化。点击-时,商品数量-1,单个商品
总价和所有商品合计减少对应价格,当数量为减为0时,移除
该产品。
5.删除:点击删除时,删除该商品,所有商品总计变化。

3.目的的意义:

熟悉javascript对dom元素进行修改,为后期的jquery学习和使用
奠定基础。

2.代码部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            /*内容居中*/
            text-align: center;
        }
        table{
            border: 1px solid red;
            border-spacing: 20px;
            /* background-color: green; */
            width: 730px;
        }
        #content{
            margin: 0 auto;
            width: 50%;
            height: 1200px;
        }
        tr img{
            width: 80px;
            height: 100px;
        }
        #top{
            height:60px;
            width: 100%;
        }
        #top img{
            float: left;
        }
        #close{
            height: auto 0;
            background-color: red;
            width: 10%;
            margin-right: 5%;
            margin-top: 3%;
            float: right;
            border-radius: 15px;
            text-align: center;
            color: wheat;
            font-weight: bold;
        }
        td input{
            width: 24px;
            height: 24px;
        }
        td a{
            text-decoration: none;
            color: black;
        }
        #bottom{
            width: 700px;
            height: 30px;
            text-align: right;
        }
        #total{
            color: red;
        }
    </style>
    <script>
        function loadData() {
            //获取所有的input
           allInputs = document.getElementsByTagName("input");
             checkboxs = new Array();
            //筛选出为checkbox的input
            for(var i=0;i<allInputs.length;i++){
                if(allInputs[i].type=="checkbox"){
                   checkboxs.push(allInputs[i]); 
                }
            }
          }
        //更新价格函数,包括数量、单个商品总价、所有商品总价的更新
        function getPrice(obj){
            //获取按钮的选中状态,用于判断是否需要改变所有商品总价和
            var flag=obj.parentNode.parentNode.children[0].children[0].checked;
            //父亲,为对应的tr对象
            var parent = obj.parentNode.parentNode;
            //获取的是input旁边span标签数量对象
            var countObj = parent.children[4].children[1];
            //获取数量
            var count = countObj.innerHTML;
            //单价span对象
            var priceObj = parent.children[3].children[1];
            //获取单价
            var price = priceObj.innerHTML;
            //获取所有总价
            var total = Number(document.getElementById("total").innerHTML);
            //当数量减为0时,需要删除该行
            if(count==1&&obj.value==="-"){
                //调用定义的函数进行删除,参数为删除按钮对象,删除该对象所在的tr标签
            del(parent.children[6].children[1],true);
            }
            switch(obj.value){
                //点击增加或者减少时,更新所有总价
                case "+":
                  count++;
                  if(flag){
                    total= total+Number(price);
                  }
                  break;
                case "-":
                  count--;
                  if(flag){
                    total= total-Number(price);
                  }
                  break;
                default:
                  break; 
            }
            //更新商品数量
            countObj.innerHTML = count;
            //获取单个商品总价对象
            var totalObj = parent.children[5].children[1];
            //给单个商品总价赋值
            totalObj.innerHTML=(count*price).toFixed(2);
            //给id为total的单个商品总价赋值
            document.getElementById("total").innerHTML=total.toFixed(2);
        }

        //购物车商品删除函数,当数量为1时,点击-,应当移除元素。传入的对象为当前对象
        //这里的flag是判断是删除事件,还是只是取消事件,为true时,表示时删除事件调用此方法,为false表示取消选中调用此事件
        function del(obj,flag){
            //父亲节点的获取,这里获取的是tbody
            var parent = obj.parentNode.parentNode.parentNode;
            //要移除的节点获取,这里是传入的obj对象所在的tr
            var child = obj.parentNode.parentNode;
            //移除操作,删除子节点======
            if(flag==true){
                parent.removeChild(child);
            }
            //减少的价格数量,也就是你从购物车删除的商品的已有价格
            var des = child.children[5].children[1].innerHTML;
            //获取的是所有商品总价的对象
            var totalObj = document.getElementById("total");
            //对价格进行转换,因为浮点型操作会导致精度丢失,保留了两位小数
            var total = (Number(totalObj.innerHTML)-des).toFixed(2);
            //更新总价
            totalObj.innerHTML = total;
        }
        //当input被选中时的事件
        function getInput(obj){
            //获取a标签 del事件的对象
            var a =obj.parentNode.parentNode.children[6].children[1];
            //取消选中事件
            if(obj.checked==false){
                //只要有一个被取消选中,那么全选按钮也被取消选中
                checkboxs[0].checked=false;
                //调用此元素的价格,将其的价格总总价减出,不删除元素
               del(a,false)
            }else{
                //选中时,把价格加上去
                var num = Number(obj.parentNode.parentNode.children[5].children[1].innerHTML);
                //所有商品总价对象
                var totalObj = document.getElementById("total");
                //更改后的价格
                num = (Number(totalObj.innerHTML)+num).toFixed(2);
                //更改总的价格
                totalObj.innerHTML=num;
                //打一个标记,用于判断是否存在未被选中的按钮,如果有一个就是false;
                var flag = true;
                for(var j=1;j<checkboxs.length;j++){
                   if(checkboxs[j].checked==false){
                      flag=false;
                   }
                }
                //给全选按钮设置选中与否
                checkboxs[0].checked=flag;
            }
        }
        /*全选与反选功能*/
        function selectAll(obj){
            //obj为全选按钮这个对象,为true时,需要将其余的checkbox的checked值设置为真
            if(obj.checked==true){
                for(var i=1;i<checkboxs.length;i++){
                    if(checkboxs[i].checked==false){
                        checkboxs[i].checked=true;
                //这里时调用的给checkbox设置的方法
                getInput(checkboxs[i]);
                    }
            }
            }else{
                //为假时,需要将所有checkbox设置取消选中
                for(var i=1;i<checkboxs.length;i++){
                checkboxs[i].checked=false;
                document.getElementById("total").innerHTML=0;
                // getInput(checkboxs[i]);
            }
            }
        }
    </script>
</head>
<body onload="loadData()">
<div id="content">
    <div id="top">
        <img src="images/dd_logo.jpg" alt="">
        <div id="close">关闭</div>
    </div>
    
    <table>
        <thead>
            <th>全选<input type="checkbox" onclick="selectAll(this)" checked="true"></th>
            <th>商品图</th>
            <th>商品信息</th>
            <th>单价()</th>
            <th>数量</th>
            <th>金额()</th>
            <th>操作</th>
        </thead>
        <tbody>
            <tr>
                <td><input type="checkbox" onclick="getInput(this)" checked="true" style="height: 13px;width:13px;"></td>
                <td><img src="images/dog.jpg" alt=""></td>
                <td>一条狗的故事</td>
                <td><span>¥</span><span>32.50</span></td>
                <td><input type="button" onclick="getPrice(this)" value="+" /><span id="count">1</span><input type="button" onclick="getPrice(this)" value="-" /></td>
                <td><span>¥</span><span id="totalPrice">32.50</span></td>
                <td><a href="">移入收藏夹</a><a href="#" onclick="del(this,true)" id="book1">&nbsp;&nbsp;删除</a></td>
            </tr>

            <tr>
                <td><input type="checkbox" onclick="getInput(this)" checked="true" style="height: 13px;width:13px;"></td>
                <td><img src="images/mai.jpg" alt=""></td>
                <td>雾霾来了怎么办</td>
                <td><span>¥</span><span>23.20</span></td>
                <td><input type="button" onclick="getPrice(this)" value="+" /><span id="count">1</span><input type="button" onclick="getPrice(this)" value="-" /></td>
                <td><span>¥</span><span id="totalPrice">23.20</span></td>
                <td><a href="">移入收藏夹</a><a href="#" onclick="del(this,true)">&nbsp;&nbsp;删除</a></td>
            </tr>
        </tbody>
    </table>
    <div id="bottom">
        总价<span style="color:red;">¥</span><span id="total">55.70</span><div id="close" style="margin-top: 0;">结算</div>
    </div>
</div>
</body>
</html>

你可能感兴趣的:(#,前端基础,js)