博客列表 >购物车案例和json常用数组

购物车案例和json常用数组

kiraseo_wwwkiraercom
kiraseo_wwwkiraercom原创
2022年07月30日 13:18:55381浏览

购物车案例

  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>实战3-购物车</title>
  8. <link rel="stylesheet" href="style.css" />
  9. </head>
  10. <body>
  11. <div class="box">
  12. <!-- 1. 全选按钮 -->
  13. <div class="selectAll">
  14. <!-- change: 当它的值发生改变时触发 -->
  15. <!-- checked: 当前是选中状态, 布尔属性 -->
  16. <input type="checkbox" class="check-all" name="check-all" onchange="checkAll()" checked />
  17. <label for="check-all">全选</label>
  18. </div>
  19. <!-- 2. 商品列表 -->
  20. <ul class="list">
  21. <li><span>选择</span><span>品名</span><span>数量</span><span>单价</span><span>金额</span></li>
  22. <li>
  23. <input type="checkbox" onchange="checkItems()" checked />
  24. <span class="content">手机</span>
  25. <input type="number" value="1" min="1" class="num" />
  26. <span class="price">100</span>
  27. <span class="amount">0</span>
  28. </li>
  29. <li>
  30. <input type="checkbox" onchange="checkItems()" checked />
  31. <span class="content">电脑</span>
  32. <input type="number" value="2" min="1" class="num" />
  33. <span class="price">200</span>
  34. <span class="amount">0</span>
  35. </li>
  36. <li>
  37. <input type="checkbox" onchange="checkItems()" checked />
  38. <span class="content">相机</span>
  39. <input type="number" value="3" min="1" class="num" />
  40. <span class="price">300</span>
  41. <span class="amount">0</span>
  42. </li>
  43. <li>
  44. <span>总计:</span>
  45. <span class="total-num">0</span>
  46. <span class="total-amount">0</span>
  47. </li>
  48. </ul>
  49. <!-- 3. 结算按钮 -->
  50. <button class="account">结算</button>
  51. </div>
  52. <script>
  53. // (一) 全选的自动设置
  54. // 1. 全选
  55. function checkAll() {
  56. // 第1步: 获取当前按钮的状态
  57. let status = event.target.checked;
  58. // 第2步: 根据当前状态,来动态的设置其它所有商品的选中状态
  59. const items = document.querySelectorAll('.list li input[type="checkbox"]');
  60. // console.log(items);
  61. items.forEach(item => (item.checked = status));
  62. // document
  63. // .querySelectorAll('.list li input[type="checkbox"]')
  64. // .forEach(item => (item.checked = event.target.checked));
  65. }
  66. // 2. 根据用户的选择来动态的设置"全选"按钮的状态
  67. function checkItems() {
  68. // 第1步: 获取全部的商品
  69. const items = document.querySelectorAll('.list li input[type="checkbox"]');
  70. // 第2步: 判断当前状态, 只有全部选中, 才返回 true,否则就返回false
  71. // console.log([...items]);
  72. // console.log(Array.from(items));
  73. let status = [...items].every(item => item.checked === true);
  74. // console.log(status);
  75. // 第3步: 用这个状态来更新全选按钮
  76. document.querySelector('.check-all').checked = status;
  77. }
  78. // (二) 商品的自动计算
  79. // 获取所有商品数量的元素
  80. const nums = document.querySelectorAll('.list .num');
  81. const items = document.querySelectorAll('.list li input[type="checkbox"] ');
  82. // 1. 计算商品总数
  83. function getTotalNum(numArr) {
  84. return numArr.reduce((acc, cur) => acc + cur,0);
  85. }
  86. // 2. 计算每个商品的金额: 数量 * 单价
  87. // numArr: 数量数组, priceArr: 单价数组
  88. function getAmount(numArr, priceArr) {
  89. return numArr.map((num, index) => {
  90. // console.log(num, index);
  91. // 以index为索引条件在priceArr中进行查询获取与数量对应的单价
  92. return num * priceArr[index];
  93. });
  94. }
  95. // 3. 计算总金额
  96. function getTotalAmount(amountArr) {
  97. return amountArr.reduce((acc, cur) => acc + cur,0);
  98. }
  99. // 自动计算的通用方法
  100. function autoCalculate() {
  101. // 数量数组
  102. let numArr = [...nums].map(item => parseInt(item.value));
  103. // 单价数组
  104. const prices = document.querySelectorAll('.list .price');
  105. let priceArr = [...prices].map(item => parseInt(item.textContent));
  106. // 金额数组: 数量数组 * 单价数组
  107. let amountArr = getAmount(numArr, priceArr);
  108. // 独立金额数据填充,由单品数量改变时触发,与独立复选框状态无关
  109. document.querySelectorAll(".list .amount").forEach((ele, i) => (ele.textContent = amountArr[i]));
  110. // 过滤出所有独立复选框选中状态的数量数组
  111. numArr = numArr.filter((ele, i) => [...items][i].checked);
  112. // 过滤出所有独立复选框选中状态的金额数组
  113. priceArr = priceArr.filter((ele, i) => [...items][i].checked);
  114. console.log(priceArr);
  115. // 合计金额
  116. let hj= getAmount(numArr, priceArr);
  117. // 将以上数量添加到页面
  118. // 1. 将总数量添加到页面
  119. document.querySelector('.total-num').textContent = getTotalNum(numArr);
  120. // 2. 将每个商品的金额填充
  121. document.querySelectorAll('.amount').forEach((item, index) => (item.textContent = amountArr[index]));
  122. // 3. 填充总金额
  123. document.querySelector('.total-amount').textContent = getTotalAmount(hj);
  124. }
  125. // 当页面加载时,根据默认值进行自动计算
  126. // window.addEventListener('load', autoCalculate, false);
  127. window.onload = autoCalculate;
  128. // 当用户更新商品数量时, 将会触发商品金额,总数量,和总金额的动态更新
  129. items.forEach(item => (item.onchange = autoCalculate));
  130. nums.forEach(item => (item.onchange = autoCalculate));
  131. </script>
  132. </body>
  133. </html>

演示效果

实例演示JSON常用的二个API

前后端交互的原理与JSON的优势

  1. 前后端的数据交互是通过json实现的。
  2. json的两种形式:json字符串,json对象
  3. 方便前台数据操作
  4. 任何语言都能接受json格式的数据

代码如下

  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>实例演示JSON常用的二个API, 并详细描述前后端交互的原理与JSON的优势</title>
  8. </head>
  9. <body>
  10. <script>
  11. console.log("JavaScript 对象或值转换为 JSON 字符串");
  12. let json = JSON.stringify({ id: 5, name: "kira" })
  13. console.log(json);
  14. console.log(typeof json);
  15. console.log("++++++++++++++++++++++");
  16. console.log("++++++++++++++++++++++");
  17. console.log("JSON 字符串转换为JavaScript 对象或值");
  18. let kira = `{"id":1,"name":"手机","price": 5999}`;
  19. let item = JSON.parse(kira);
  20. console.log(item);
  21. console.log(typeof item);
  22. </script>
  23. </body>
  24. </html>

输出效果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议