如何用原生JS写一个简单购物车?来这篇文章告诉你。

简介: 如何用原生JS写一个简单购物车?来这篇文章告诉你。

首先声明这仅仅只是个人理解而已,有什么错误或者缺少大家尽管在评论区发出来,共同学习,一起进步。

首先呢?我们要创建一个HTML基础代码。

基础HTML代码模板如下:他是比较关键的,是我们接下来了解的属性相关,可以直接复制拿来用的哈,它的意义就是搭载接下来的属性。

HTML:  

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="css/index.css">
  </head>
  <body>
    <table border="1" cellspacing="0" cellpadding="0">
      <tr>
        <th>名称</th>
        <th>价格</th>
        <th>打折</th>
        <th>数量</th>
        <th>操作</th>
      </tr>
      <tbody id="ProductInfo">
      </tbody>
      <div class="wrap clearfix">
        <tfoot>
          <tr>
            <td></td>
            <td id="FooterSum">总价:¥<span id="prices">0</span></td>
            <td></td>
            <td>总数量:<span id="nums">0</span></td>
            <td></td>
          </tr>
        </tfoot>
        <div>
          <button id="product">添加商品</button>
          <div id="shopbox">
            <button id="pushbut">添加</button>
            <button id="cancel">取消</button>
            <input type="text" id="shoptext" placeholder="请输入商品名称">
            <input type="number" id="shopprice" placeholder="请输入商品价格">
            <input type="number" id="rebate" placeholder="请输入商品折扣">
            <input type="number" id="shopnum" placeholder="请输入商品数量">
          </div>
        </div>
  </body>
</html>

CSS:

* {
  margin: 0px;
  padding: 0px;
}
a {
  text-decoration: none;
}
.wrap {
  width: 1180px;
  margin: 0 auto;
}
td,
tr {
  border: 1px solid black;
}
table{
  margin-left: 11.5%;
}
th,
td {
  width: 235px;
  height: 50px;
  text-align: center;
}
span {
  padding: 0px 10px;
}
.cut,
.add,
.collect,
.delete {
  padding: 5px;
  margin: 7px;
}
#product {
  padding: 10px;
  margin-left: 11.5%;
}
#pushbut�cancel {
  padding: 5px;
}
#shopbox {
  display: none;
}
#shopbox{
  margin-left: 11.5%;
}

接下来就是最重要的JS部分:

我们先创建一个数组,我们在这个数组上进行操作

let Data = [{             num: 0,             price: 5000,              discount: 85,             name: '鸭梨X',              id: 1,            },            {             num: 0,             price: 100,             discount: 75,             name: 'GB003',              id: 2,            },            {             num: 0,             price: 20,              discount: 50,             name: '六神花露水',              id: 3,            }         ]

获取到DOM进行渲染操作

let ProductInfo = document.querySelector('#ProductInfo');
          let prices = document.querySelector('#prices');
          let nums = document.querySelector('#nums');
          let addition = document.querySelector('#product');
          let shopbox = document.querySelector('#shopbox');
          function func(arr) {
            ProductInfo.innerHTML = '';
            let Str = ''
            for (let i = 0; i < arr.length; i++) {
              Str += '<tr class="RowList"><td class="shopnamenow">' + arr[i].name + '</td>' +
                '<td>¥<span class="shopPriceNow">' + arr[i].price + '</span></td>' + '<td>' + Data[i].discount +
                '%</td>' +
                '<td class="bcc"><button class="cut" onclick="sub(' + i + ')">-</button><strong class="shopNumNow">' +
                Data[i].num + '</strong><button class="add" onclick="Add(' + i + ')">+</button></td>' +
                '<td><button class="collect">编辑</button><button class="delete" onclick="dele(' + i +
                ')">删除</button></td></tr>'
            }
            ProductInfo.innerHTML = Str;
          }
          func(Data);

效果图如下:

b5d5e43023614779a6e3b8032dc4b4c5.png数量操作部分:

let pushbut = document.querySelector('#pushbut')
          let cancel = document.querySelector('#cancel')
          var del = document.querySelectorAll('.del');
          // 增加计算
          function Add(i) {
            let RowNum = document.querySelector('#ProductInfo');
            let shopNum = RowNum.getElementsByTagName('strong');
            Data[i].num++;
            shopNum[i].innerHTML = Data[i].num;
            amount++;
            nums.innerHTML = amount;
            totalPrices += Data[i].price;
            prices.innerHTML = totalPrices
          }
          // 减少计算
          function sub(i) {
            if (Data[i].num > 0) {
              Data[i].num--;
              totalPrices -= Data[i].price;
              amount--;
              prices.innerHTML = totalPrices;
              nums.innerHTML = amount;
            }
            let RowNum = document.querySelector('#ProductInfo');
            let shopNum = RowNum.getElementsByTagName('strong');
            shopNum[i].innerHTML = Data[i].num;
          }

删除和添加商品:

// 删除操作
          function dele(i) {
            if (Data[i].num > 0) {
              totalPrices -= (Data[i].price * Data[i].num);
              amount -= Data[i].num;
              prices.innerHTML = totalPrices;
              nums.innerHTML = amount;
            }
            Data.splice(i, 1)
            func(Data);
          }
          // 添加数据
          let totalPrices = 0;
          let amount = 0;
          addition.onclick = function() {
            shopbox.style.display = 'block';
            addition.style.display = 'none';
          }
          cancel.onclick = function() {
            shopbox.style.display = 'none';
            addition.style.display = 'block';
          }
          let nullShop = NaN;
          pushbut.onclick = function() {
            let shopnum = document.querySelector('#shopnum').value;
            let shopprice = document.querySelector('#shopprice').value;
            let shoptext = document.querySelector('#shoptext').value;
            let rebate = document.querySelector('#rebate').value;
            if (shopnum != '' || shopprice != '' || rebate != '' || shoptext != '') {
              Data.push({
                num: parseInt(shopnum),
                discount: parseInt(rebate),
                price: parseInt(shopprice),
                name: shoptext,
              })
              amount = parseFloat(amount) + parseFloat(shopnum);
              nums.innerHTML = amount;
              totalPrices += parseFloat(shopnum) * parseFloat(shopprice);
              prices.innerHTML = totalPrices;
              func(Data)
            } else {
              alert(' * 未添加商品信息 * ');
            }
          }

不多说我们直接看效果

e28a80125c774627bb6ea0e6d51e1367.png

目录
相关文章
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
97 2
|
15天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
24 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
37 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
3月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
39 0
|
3月前
|
JavaScript 前端开发 API
从零开始学表单操作,jQuery 与原生 JavaScript 完全指南,带你轻松掌握网页交互关键!
【8月更文挑战第31天】在网页开发中,表单是实现用户互动的关键元素。无论是收集信息、提交数据还是验证输入,都需要对表单进行有效操作。本文档介绍了如何使用原生 JavaScript 和 jQuery 操作表单,包括获取表单元素、读写表单值、处理表单提交及验证等核心功能。jQuery 提供了更简洁的语法和更好的兼容性,但原生 JavaScript 在性能上有优势。选择合适的方法取决于项目需求和个人偏好。下面通过具体示例展示了两种方式的操作方法。
39 0
|
3月前
|
缓存 JavaScript 前端开发
Vue.js 2 项目实战(五):水果购物车
Vue.js 2 项目实战(五):水果购物车
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
125 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
82 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
75 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
93 4
下一篇
无影云桌面