热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

购物车实例

// 商品信息 const items = [ { id: 286, name: "酸奶", units: "箱", price: 50, num: 1 }

  1. <script type="module">
  2. // 商品信息
  3. const items = [
  4. { id: 286, name: "酸奶", units: "箱", price: 50, num: 1 },
  5. { id: 870, name: "苹果", units: "千克", price: 10, num: 1 },
  6. { id: 633, name: "外套", units: "件", price: 300, num: 1 },
  7. { id: 153, name: "皮鞋", units: "双", price: 400, num: 1 },
  8. { id: 109, name: "手机", units: "台", price: 5000, num: 1 },
  9. ];
  10. // 导入购物车模块
  11. import Cart from "./modules/cart.js";
  12. // 实例化购物车类
  13. const cart = new Cart(items);
  14. // 获取购物车
  15. const table = document.querySelector("table");
  16. // 将商品渲染到购物车元素中tbody
  17. // 创建tbody:商品容器
  18. const tbody = table.createTBody();
  19. // 创建tbody的内容,商品列表
  20. items.forEach(function (item, key) {
  21. // 创建商品模板字符串
  22. const tr = `
  23. <tr>
  24. <td><input type="checkbox" name="" class="check" checked/>td>
  25. <td>${item.id}td>
  26. <td>${item.name}td>
  27. <td>${item.units}td>
  28. <td>${item.price}td>
  29. <td>
  30. <input type="number" name="" value="${item.num}" min='1'/>
  31. td>
  32. <td class='money'>${cart.money[key]}td>
  33. tr>`;
  34. // 将内容填充到tbody
  35. tbody.insertAdjacentHTML("beforeend", tr);
  36. });
  37. // 将相关统计数据(总数量,总金额),填充到tfoot中
  38. const tfoot = table.createTFoot();
  39. let tr = `
  40. <tr>
  41. <td colspan='5'>总计:td>
  42. <td class='total'>${cart.total}td>
  43. <td class='total-money'>${cart.totalMoney}td>
  44. tr>
  45. `;
  46. tfoot.insertAdjacentHTML("beforeend", tr);
  47. // 更新数据,实时计算出结果并显示出来
  48. // 拿到所有的数量控件
  49. const nums = table.querySelectorAll("input[type=number]");
  50. // 为每一个数量控件添加事件监听:input
  51. nums.forEach(function (num, key) {
  52. num.oninput = function () {
  53. // 计算总数量
  54. items[key].num = num.value * 1;
  55. cart.total = cart.getTotal(items);
  56. // 计算每个商品金额
  57. // cart.money[key] = num.value * 1 * items[key].price;
  58. cart.money[key] = cart.getMoney(items)[key];
  59. // 计算商品总金额
  60. cart.totalMoney = cart.getTotalMoney();
  61. // 将数据渲染到指定元素上
  62. table.querySelector(".total").textContent = cart.total;
  63. table.querySelectorAll(".money")[key].textContent = cart.money[key];
  64. table.querySelector(".total-money").textContent = cart.totalMoney;
  65. };
  66. });
  67. // 选项按钮
  68. const checkAll = document.querySelector(".check-all");
  69. const tbodyCheck = document.querySelectorAll(".check");
  70. checkAll.onclick = function () {
  71. for (var i = 0; i < tbodyCheck.length; i++) {
  72. tbodyCheck[i].checked = checkAll.checked;
  73. }
  74. };
  75. for (var i = 0; i < tbodyCheck.length; i++) {
  76. tbodyCheck[i].onclick = function () {
  77. let num = 0;
  78. for (var i = 0; i < tbodyCheck.length; i++) {
  79. if (tbodyCheck[i].checked) num++;
  80. }
  81. if (num === tbodyCheck.length) {
  82. checkAll.checked = true;
  83. } else {
  84. checkAll.checked = false;
  85. }
  86. };
  87. }
  88. script>

  1. // 默认导出
  2. // 购物车模块
  3. export default class {
  4. // 构造器
  5. constructor(items) {
  6. // 1. 商品总数量
  7. this.total = this.getTotal(items);
  8. // 2. 每个商品金额(数组)
  9. this.money = this.getMoney(items);
  10. // 3. 商品总金额
  11. this.totalMoney = this.getTotalMoney();
  12. }
  13. // (一) 计算商品总数量
  14. getTotal(items) {
  15. // 1. 数量数组: 每个商品的数量num字段组成的数组
  16. let numArr = items.map(function (item) {
  17. return item.num;
  18. });
  19. // 2. 计算总数量
  20. return numArr.reduce(function (acc, cur) {
  21. return acc + cur;
  22. });
  23. }
  24. // (二) 计算每个商品的金额
  25. getMoney(items) {
  26. // 金额 = 数量 * 单价
  27. return items.map(function (item) {
  28. return item.num * item.price;
  29. });
  30. }
  31. // (三) 计算商品总金额
  32. getTotalMoney() {
  33. return this.money.reduce(function (acc, cur) {
  34. return acc + cur;
  35. });
  36. }
  37. }


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
w3812127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有