Blogger Information
Blog 28
fans 0
comment 0
visits 13132
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
购物车全选/全不选功能和库存管理功能实例演示
手机用户1594223549
Original
491 people have browsed it

1.输出结果

2.代码部分

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>购物车全选</title>
  8. <style>
  9. .cart {
  10. width: 460px;
  11. display: grid;
  12. gap: 10px;
  13. }
  14. table {
  15. border-collapse: collapse;
  16. text-align: center;
  17. }
  18. table caption {
  19. font-size: 20px;
  20. margin-bottom: 10px;
  21. }
  22. table input[type='number'] {
  23. width: 40px;
  24. }
  25. table th,
  26. table td {
  27. border-bottom: thin solid #888;
  28. padding: 5px;
  29. }
  30. table thead {
  31. border-top: thin solid #888;
  32. background-color: lightcoral;
  33. }
  34. table tfoot {
  35. background-color: lightcoral;
  36. }
  37. table tbody tr:nth-child(odd):hover {
  38. background-color: #eee;
  39. cursor: pointer;
  40. }
  41. table tr td:first-child {
  42. padding-left: 20px;
  43. }
  44. table tr td:last-child {
  45. padding-right: 20px;
  46. }
  47. .cart .pay {
  48. display: grid;
  49. grid: 1fr / auto-flow;
  50. place-content: end;
  51. gap: 10px;
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <div class="cart">
  57. <table>
  58. <caption>
  59. 我的购物车
  60. </caption>
  61. <thead>
  62. <tr>
  63. <!-- 全选按钮 -->
  64. <td><input type="checkbox" name="" class="check-all" checked /></td>
  65. <td>编号</td>
  66. <td>品名</td>
  67. <td>单位</td>
  68. <td>单价</td>
  69. <td>数量</td>
  70. <td>金额(元)</td>
  71. </tr>
  72. </thead>
  73. </table>
  74. </div>
  75. <script type="module">
  76. // (一) 商品信息
  77. const items = [
  78. { id: 286, name: '酸奶', units: '箱', price: 50, num: 1 },
  79. { id: 870, name: '苹果', units: '千克', price: 10, num: 1 },
  80. { id: 633, name: '外套', units: '件', price: 300, num: 1 },
  81. { id: 153, name: '皮鞋', units: '双', price: 400, num: 1 },
  82. { id: 109, name: '手机', units: '台', price: 5000, num: 1 },
  83. ];
  84. // (二) 导入购物车模块
  85. import Cart from './modules/cart.js';
  86. // (三) 实例化购物车类
  87. const cart = new Cart(items);
  88. // console.log(cart.total);
  89. // console.log(cart.money);
  90. // console.log(cart.totalMoney);
  91. // (四) 获取购物车(表格)
  92. const table = document.querySelector('table');
  93. // (五) 将商品渲染到购物车元素中 tbody
  94. // 1.创建 tbody: 商品容器
  95. const tbdoy = table.createTBody();
  96. // 2. 创建tbody的内容,商品列表
  97. // 把item里面的所有的商品遍历一遍,除了item还需要用其他值,根据键获取
  98. items.forEach(function (item, key) {
  99. // 1. 创建商品模板字符串
  100. // 插入tobdy的每个商品
  101. const tr = `
  102. <tr>
  103. <td><input type="checkbox" name="" class="check" checked /></td>
  104. <td>${item.id}</td>
  105. <td>${item.name}</td>
  106. <td>${item.units}</td>
  107. <td>${item.price}</td>
  108. <td>
  109. <input type="number" name="" value="${item.num}"
  110. </td>
  111. <td class="money">${cart.money[key]}</td>
  112. </tr>
  113. `;
  114. // 2. 将内容填充到tbody
  115. tbdoy.insertAdjacentHTML('beforeend', tr);
  116. });
  117. // (六) 将相关统计数据(总数量,总金额),填充到tfoot中
  118. const tfoot = table.createTFoot();
  119. // 创建tfoot内容
  120. let tr = `
  121. <tr>
  122. <td colspan="5">总计:</td>
  123. <td class="total">${cart.total}</td>
  124. <td class="total-money">${cart.totalMoney}</td>
  125. </tr>
  126. `;
  127. tfoot.insertAdjacentHTML('beforeend', tr);
  128. // (七) 更新数量,实时计算出结果并显示出来
  129. // 1. 拿到所有的数量控件
  130. // input[type=number] 数量控件通过标签加属性选择器来拿,然后放到一个变量里面保存’
  131. const nums = table.querySelectorAll('input[type=number]');
  132. // 2. 为每一个数量控件添加事件监听: input
  133. nums.forEach(function (num, key) {
  134. num.oninput = function () {
  135. // 1. 计算总数量
  136. // 是个字符串,需要转成数值类型,要不然没法相加
  137. // 对应的商品找到,对数量更新
  138. items[key].num = num.value * 1;
  139. cart.total = cart.getTotal(items);
  140. // 2. 计算每个商品金额
  141. cart.money[key] = num.value * 1 * items[key].price;
  142. // 3. 计算每个商品金额
  143. cart.totalMoney = cart.money.reduce(function (acc, cur) {
  144. return acc + cur;
  145. });
  146. // 4.将数据渲染到指定元素上
  147. table.querySelector('.total').textContent = cart.total;
  148. // 加key知道的更新的哪一个 ,数组多个值
  149. table.querySelectorAll('.money')[key].textContent = cart.money[key];
  150. table.querySelector('.total-money').textContent = cart.totalMoney;
  151. };
  152. });
  153. </script>
  154. </body>
  155. </html>
  1. // 默认导出购物车模块
  2. export default class {
  3. // 构造器
  4. constructor(items) {
  5. // 1. 商品总数量
  6. // 用属性的方法写
  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. // map有返回值,forezch没返回值
  17. let numArr = items.map(function(item) {
  18. return item.num;
  19. });
  20. // 2. 计算总数量
  21. // arr累加器,cur当前值 然后returm出去之后前台就有值了
  22. // 遍历数组
  23. return numArr.reduce(function (acc, cur) {
  24. return acc + cur;
  25. });
  26. }
  27. // (二) 计算每个商品的金额
  28. getMoney(items) {
  29. // 金额 = 数量 * 单价
  30. return items.map(function (item){
  31. return item.num * item.price;
  32. });
  33. }
  34. // (三) 计算商品总金额
  35. getTotalMoney() {
  36. return this.money.reduce(function (acc, cur) {
  37. return acc + cur;
  38. });
  39. }
  40. }
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:整体效果不错, 继续加油
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post