Vue实现购物车(纯操作数据,不操作dom)注意:自己引入Vue.js哦

代码:

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
    <script src="../js/Vue.js"></script>
    <style>
      tr {
        display: block;
        border-bottom: 1px dotted #dcdcdc;
      }
      td {
        width: 100px;
        text-align: center;
      }
      img {
        width: 80px;
        height: 80px;
      }
      input {
        width: 30px;
        text-align: center;
      }
      .bottom {
        width: 640px;
        height: 80px;
        line-height: 80px;
        margin-top: 10px;
        border: 1px solid #dcdcdc;
      }
      .qjs {
        width: 80px;
        height: 50px;
        background-color: red;
        color: white;
        font-size: 16px;
        border: 0;
        margin-left: 15px;
      }
      .jq::after {
        content: "¥";
      }
      .xj::after {
        content: "¥";
      }
      .del {
        cursor: pointer;
      }
      .del:hover{
        color: red;
      }
      .alldel {
        padding-left: 16px;
        cursor: pointer;
      }
      .red {
        color: red;
      }
      .alldel:hover {
        color: red;
      }
      .qlc {
        cursor: pointer;
      }
      .qlc:hover {
        color: red;
      }
      .trtop{
        height: 40px;
      }
      .spzj{
        margin-left: 95px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <table class="tabzong">
      <tr class="trtop">
        <td><input type="checkbox" class="allchecked" v-model="allchecked" @click="alltype()"/>全选</td>
        <td>商品</td>
        <td>单价</td>
        <td>商品数量</td>
        <td>小计</td>
        <td>操作</td>
      </tr>
      <tr v-for="(item) in list" :key="item.id">
        <td><input type="checkbox" @click="dx(item)" v-model="item.type"/></td>
        <td>
          <img
            :src=item.src
            alt=""
          />
        </td>
        <td class="jq">{{item.price}}</td>
        <td>
          <button @click="jian(item)" :disabled="item.disabled">-</button
          ><input type="text" :value=item.num /><button @click="jia(item)">+</button>
        </td>
        <td class="xj">{{item.xiaoji}}</td>
        <td class="del" @click="del(item.id)">删除</td>
      </tr>
      
    </table>
      <div class="bottom">
        <span style="margin-right: 30px" class="alldel" @click="alldel()">删除所选商品</span>
        <span class="qlc" @click="alldel()">清理购物车</span>
        <span class="spzj"
          >已经选中<span class="red">{{allshop}}</span>件商品总价:
          <span class="red">{{allnum}}¥</span></span
        >
        <button class="qjs">去结算</button>
      </div>
    </div>
  </body>
  <script>
    let vm = new Vue({
            el:'#app',
            data() {
                return {
                  allchecked:false,
                  allshop:0,
                   list:[{
                      id:1,
                      type:false,
                      disabled:true,

                      src:"https://img.alicdn.com/i2/2204920870409/O1CN01mobmIm1EtMniYVU0J_!!2204920870409.jpg",
                      price:5,
                      num:1,
                      xiaoji:5
                   },
                   {
                      id:2,
                      disabled:true,
                      type:false,
                      src:"https://imgservice.suning.cn/uimg1/b2c/image/gKRneKhFHGnB1oh0Imoxcg.jpg_800w_800h_4e",
                      price:3,
                      num:1,
                      xiaoji:3
                   },
                   {
                      id:3,
                      disabled:true,
                      type:false,
                      src:"https://imgservice.suning.cn/uimg1/b2c/image/ZzNpZsy4U3v8WgTbKqfN3A.jpg_800w_800h_4e",
                      price:10,
                      num:1,
                      xiaoji:10
                   },
                   {
                      id:4,
                      disabled:true,
                      type:false,
                      src:"https://img2.baidu.com/it/u=4280167200,1529131522&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1066",
                      price:20,
                      num:1,
                      xiaoji:20
                   }

                   ]
                  
                }
            },
            // 在这事件处理函数
            methods: {
                dx(arr){
                  this.list.forEach(item=>{
                    if(item.id==arr.id){
                      item.type=!item.type
                      if(arr.type==true){
                        this.allshop++
                      }else{
                        this.allshop--
                      }
                    }
                    
                  })
                  let type =  this.list.every(item=>{
                    return item.type == true
                  })
                  console.log(type);
                  
                  this.allchecked=type
                  
                },
                alltype(){
                  let sum=0
                  this.list.forEach(item=>{
                    item.type=!this.allchecked
                    sum++
                  })
                  if(!this.allchecked){
                      this.allshop=sum
                    }else{
                      this.allshop=0
                    }
                },
                jian(arr){
                   arr.num--
                   arr.xiaoji=arr.num*arr.price
                   if(arr.num>1){
                      arr.disabled=false
                   }else{
                      arr.disabled=true
                   }
                },
                jia(arr){
                   arr.num++
                   arr.xiaoji=arr.num*arr.price

                   if(arr.num>1){
                      arr.disabled=false
                   }
                },
                del(id){
                  let index=this.list.findIndex(item=>{
                    item.id==id
                  })
                  this.list.splice(index,1)
                },
                alldel(){
                     this.list = this.list.filter(item => !item.type);
                },

                
            },
            computed: {
              allnum(){
                let sum=0
                this.list.forEach(item=>{
                   if( item.type==true){
                    sum+=item.xiaoji
                   }
                })
                return sum
            },
            
          }
        })
  </script>
</html>

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值