(六)原生js案例之简易购物车

带框架的购物车估计都写过,那原生的购物车实现,现在应该很少写了吧

实现效果

请添加图片描述

代码实现

  • 必要的css
.order-list{
        width: 800px;
        margin: 10px auto;
      }
      .order-title{
        width: 800px;
        margin: 30px auto 10px ;
      }
      body{
        background: linear-gradient(90deg,#FFF1EB 0%,#EBACF9 100%),linear-gradient(90deg,#FFF1EB 0%,#ACE0F9 100%); 
        height: 100vh;
        overflow: hidden ;
      }
  • 静态页面
<h4 class="order-title">购物车</h4>
    <ul id="list" class="order-list list-group">
      <li class="list-group-item d-flex align-items-center">
        <button type="button" class="btn btn-primary">add</button>
        <strong class="mx-2">0</strong>
        <button type="button" class="btn btn-danger">cut</button>
        <div class="ms-auto">
           单价:<em class="m-2">30</em>
           小计:<span>0元</span>
        </div>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <button type="button" class="btn btn-primary">add</button>
        <strong class="m-2">0</strong>
        <button type="button" class="btn btn-danger">cut</button>
        <div class="ms-auto">
           单价:<em class="m-2">20</em>
           小计:<span>0</span>
        </div>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <button type="button" class="btn btn-primary">add</button>
        <strong class="m-2">0</strong>
        <button type="button" class="btn btn-danger">cut</button>
        <div class="ms-auto">
           单价:<em class="m-2">15</em>
           小计:<span>0</span>
        </div>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <button type="button" class="btn btn-primary">add</button>
        <strong class="m-2">0</strong>
        <button type="button" class="btn btn-danger">cut</button>
        <div class="ms-auto">
           单价:<em class="m-2">25.5</em>
           小计:<span>0</span>
        </div>
      </li>
    </ul>
    <ul class="order-list list-group">
      <li class="list-group-item d-flex align-items-center bg-danger text-light">
        <span>商品合计: <em id="goodCount">0</em></span>
        <span class="mx-2">总价: <strong id="totalPrice">0元</strong></span>
      </li>
    </ul>
  • 核心逻辑
window.onload = function(){
        const OList = document.getElementById('list');
        const oLi = OList.getElementsByTagName('li');
        const goodCount = document.getElementById('goodCount');
         const oTotalPrice = document.getElementById('totalPrice');
        for(let i = 0;i < oLi.length;i++){
          handleShopCart(oLi[i]);
        }
        function handleShopCart(obj){
           const oBtn = obj.querySelectorAll('button');
           const oStrong = obj.querySelector('strong');
           const oPrice = obj.querySelector('em');
           const oTotal = obj.querySelector('span');
           
           // 1. 添加
           let num = Number(oStrong.innerHTML)
           let price = parseFloat(oPrice.innerHTML)
           oBtn[0].onclick = function(){
            num++;
            oStrong.innerHTML = num;
            oTotal.innerHTML = num * price + '元';
            handleTotalPrice();
           }
           oBtn[1].onclick = function(){
            if(num <= 0){
              num = 0;
            }else{
              num--;
            }
            oStrong.innerHTML = num;
            oTotal.innerHTML = num * price + '元';
            handleTotalPrice();
           }
        }
        //计算总价
        function handleTotalPrice(){
            let goodSCount = 0;
            let totalPrice = 0;
            for(let i = 0;i < oLi.length;i++){
              let count  = Number(oLi[i].querySelector('strong').innerHTML);
              let price = parseFloat(oLi[i].querySelector('span').innerHTML);
              goodSCount += count;
              totalPrice += price;
            }
            goodCount.innerHTML = goodSCount;
            oTotalPrice.innerHTML = totalPrice.toFixed(2) + '元';
        }

       }

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 16:26:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 16:26:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 16:26:01       57 阅读
  4. Python语言-面向对象

    2024-07-19 16:26:01       68 阅读

热门阅读

  1. 数据结构---数组

    2024-07-19 16:26:01       17 阅读
  2. 【windows】网络信息相关命令

    2024-07-19 16:26:01       18 阅读
  3. python3.11SSL: SSLV3_ALERT_HANDSHAKE_FAILURE

    2024-07-19 16:26:01       20 阅读
  4. 最短路径算法——A*算法

    2024-07-19 16:26:01       20 阅读
  5. Vue进阶之Vue无代码可视化项目(七)

    2024-07-19 16:26:01       19 阅读
  6. Gmsh教程

    2024-07-19 16:26:01       20 阅读
  7. 在 Ubuntu Server 22.04 上安装 Docker 的详细步骤

    2024-07-19 16:26:01       19 阅读