ASCII码 ASCII码

购物车实例演示

发布于:2022-04-14 13:25:45  栏目:技术文档

代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  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>购物车-2</title>
  8. <link rel="stylesheet" href="css/demo3.css">
  9. </head>
  10. <body>
  11. <div class="box">
  12. <!-- 全选框 -->
  13. <div class="selectAll">
  14. <input type="checkbox" class="check-all" name="check-all" onchange="checkAll()" checked>
  15. <label for="check-all">全选</label>
  16. </div>
  17. <!-- 商品列表 -->
  18. <ul class="list">
  19. <li>
  20. <span>选择</span>
  21. <span>品名</span>
  22. <span>数量</span>
  23. <span>单价</span>
  24. <span>金额</span>
  25. </li>
  26. <li>
  27. <input type="checkbox" onchange="checkItems()" checked>
  28. <span class="content">吹风机</span>
  29. <input type="number" value="1" min="1" class="num">
  30. <span class="price">100</span>
  31. <span class="amount">0</span>
  32. </li>
  33. <li>
  34. <input type="checkbox" onchange="checkItems()" checked>
  35. <span class="content">电脑</span>
  36. <input type="number" value="2" min="1" class="num">
  37. <span class="price">2000</span>
  38. <span class="amount">0</span>
  39. </li>
  40. <li>
  41. <input type="checkbox" onchange="checkItems()" checked>
  42. <span class="content">相机</span>
  43. <input type="number" value="3" min="1" class="num">
  44. <span class="price">1500</span>
  45. <span class="amount">0</span>
  46. </li>
  47. <li>
  48. <span>总计:</span>
  49. <span class="total-num">0</span>
  50. <span class="total-amount">0</span>
  51. </li>
  52. </ul>
  53. <button class="account">结算</button>
  54. </div>
  55. <script>
  56. //全选
  57. function checkAll() {
  58. let status=event.target.checked;
  59. console.log(status);
  60. //子商品状态
  61. document
  62. .querySelectorAll(".list li input[type='checkbox']")
  63. .forEach((item)=>(item.checked=status));
  64. autoCalculate();
  65. }
  66. function checkItems() {
  67. //全部商品
  68. let items = document.querySelectorAll(".list li input[type='checkbox']");
  69. //判断状态
  70. let status=[...items].every((item)=>item.checked===true);
  71. console.log(status);
  72. document.querySelector('.check-all').checked=status;
  73. autoCalculate();
  74. }
  75. const nums=document.querySelectorAll('.num');
  76. // console.log(nums);
  77. //商品是否被选中
  78. function goodStatus(numArr){
  79. let items =document.querySelectorAll(".list li input[type='checkbox']");
  80. return numArr.map((num,index)=>{
  81. if (items[index].checked===false){
  82. return (num=0);
  83. } else {
  84. return num;
  85. }
  86. });
  87. }
  88. //计算总数量
  89. function getTotalNum(numArr) {
  90. numArr=goodStatus(numArr);
  91. return numArr.reduce((acc, cur)=>acc+cur);
  92. }
  93. //计算每个商品金额
  94. function getAmount(numArr,priceArr){
  95. return numArr.map((num,index)=>num*priceArr[index]);
  96. }
  97. //总金额
  98. function getTotalAmount(amountArr){
  99. amountArr=goodStatus(amountArr);
  100. return amountArr.reduce((acc,cur)=>acc+cur);
  101. }
  102. //自动计算
  103. function autoCalculate() {
  104. //数量数组
  105. const numArr=[...nums].map((num)=>parseInt(num.value));
  106. //单价数组
  107. const prices=document.querySelectorAll('.price');
  108. const pricesArr=[...prices].map((price)=>parseInt(price.textContent));
  109. //金额数组
  110. const amountArr =getAmount(numArr,pricesArr);
  111. document.querySelector('.total-num').textContent = getTotalNum(numArr);
  112. document.querySelector('.total-amount').textContent =
  113. getTotalAmount(amountArr);
  114. //为每个商品填充金额
  115. document
  116. .querySelectorAll('.amount')
  117. .forEach((amount, index) => (amount.textContent = amountArr[index]));
  118. }
  119. //自动加载
  120. window.onload = autoCalculate();
  121. //数量变化自动计算
  122. [...nums].forEach((num) => (num.onchange = autoCalculate));
  123. </script>
  124. </body>
  125. </html>

效果:

相关推荐
阅读 +