Blogger Information
Blog 62
fans 3
comment 1
visits 29576
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
购物车案例和json常用数组
kiraseo_wwwkiraercom
Original
376 people have browsed it

购物车案例

  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>

输出效果

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