博客列表 >实例演示购物车 实例演示JSON常用的两个API 交互的原理与JSON的优势

实例演示购物车 实例演示JSON常用的两个API 交互的原理与JSON的优势

早晨
早晨原创
2022年07月31日 23:33:251155浏览

实例演示购物车

运行效果

购物车代码

  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. </head>
  9. <style>
  10. /* 浏览器和标签都有默认的样式 清除默认样式 */
  11. * {
  12. margin: 0;
  13. padding: 0;
  14. }
  15. /* 清除加粗标签的默认样式 */
  16. b,
  17. strong {
  18. font-weight: normal;
  19. }
  20. /* 清除倾斜标签的默认样式 */
  21. i,
  22. em {
  23. font-style: normal;
  24. }
  25. /* 清除默认下划线 */
  26. a,
  27. u {
  28. text-decoration: none;
  29. }
  30. /* 超链接默认颜色为黑色 */
  31. a {
  32. color: #000;
  33. }
  34. /* 清除列表的默认符号样式 */
  35. ul,
  36. ol,
  37. li {
  38. list-style: none;
  39. }
  40. /* 左浮动 */
  41. .u-l {
  42. float: left;
  43. }
  44. /* 右浮动 */
  45. .u-r {
  46. float: right;
  47. }
  48. /* 清除浮动 */
  49. .clearfix {
  50. clear: both;
  51. }
  52. .cart {
  53. margin: 0 auto;
  54. width: 95%;
  55. }
  56. /* 购物车头部样式 */
  57. .cart-head {
  58. height: 70px;
  59. line-height: 70px;
  60. }
  61. .col {
  62. width: 10%;
  63. }
  64. .col-img img {
  65. width: 100px;
  66. height: 100px;
  67. }
  68. .col-name {
  69. width: 30%;
  70. }
  71. .col-price {
  72. width: 20%;
  73. padding-right: 18px;
  74. }
  75. .col-num {
  76. width: 10%;
  77. text-align: center;
  78. }
  79. .col-sum {
  80. text-align: center;
  81. color: #ff6700;
  82. }
  83. .col-active {
  84. text-align: center;
  85. }
  86. /* 购物车商品样式 */
  87. .item-box {
  88. overflow: hidden;
  89. padding: 20px 0;
  90. border-top: 1px solid #ccc;
  91. }
  92. .change-goods-num {
  93. width: 148px;
  94. height: 38px;
  95. border: 1px solid #000;
  96. }
  97. .change-goods-num a {
  98. float: left;
  99. width: 38px;
  100. height: 38px;
  101. line-height: 38px;
  102. font-size: 20px;
  103. color: #000;
  104. text-align: center;
  105. }
  106. .change-goods-num input {
  107. float: left;
  108. width: 72px;
  109. height: 38px;
  110. font-size: 18px;
  111. line-height: 38px;
  112. text-align: center;
  113. border-width: 0;
  114. }
  115. /* 底部 */
  116. .cart-foot {
  117. height: 50px;
  118. line-height: 50px;
  119. border: 1px solid #ccc;
  120. }
  121. .section-left a {
  122. margin-left: 32px;
  123. color: #757575;
  124. }
  125. .section-left span {
  126. margin-left: 16px;
  127. padding-left: 16px;
  128. color: #757575;
  129. /* border-left: 1px solid #ccc; */
  130. }
  131. .section-left i {
  132. color: #ff6700;
  133. }
  134. .settlement {
  135. margin-left: 40px;
  136. padding: 0 40px;
  137. font-size: 18px;
  138. background-color: orange;
  139. color: #fff;
  140. }
  141. .total-price {
  142. color: #ff6700;
  143. padding-right: 30px;
  144. }
  145. .total-price em {
  146. font-size: 30px;
  147. }
  148. </style>
  149. <body>
  150. <div class="cart">
  151. <!-- 购物车头部 -->
  152. <div class="cart-head clearfix">
  153. <div class="col col-check u-l">
  154. <input type="checkbox" id="all" class="check" />
  155. <label for="all">全选</label>
  156. </div>
  157. <div class="col col-img u-l">&nbsp;</div>
  158. <div class="col col-name u-l">商品名称</div>
  159. <div class="col col-price u-l">单价</div>
  160. <div class="col col-num u-l">数量</div>
  161. <div class="col col-sum u-l">小计</div>
  162. </div>
  163. <!-- 购物车列表 -->
  164. <div class="cart-list">
  165. <!-- 商品块 -->
  166. <div class="list-item">
  167. <div class="item-box">
  168. <div class="col col-check u-l">
  169. <input type="checkbox" class="check single" />
  170. </div>
  171. <div class="col col-img u-l">
  172. <img src="./images/1.jpg" alt="" />
  173. </div>
  174. <div class="col col-name u-l">
  175. 天梭(TISSOT)瑞士手表 天梭男表速敢黑武士钢带石英男士运动腕表
  176. </div>
  177. <div class="col col-price u-l">3555元</div>
  178. <div class="col col-num u-l">
  179. <div class="change-goods-num">
  180. <a href="javascript:;" class="jianhao">-</a>
  181. <input type="text" value="1" />
  182. <a href="javascript:;" class="jiahao">+</a>
  183. </div>
  184. </div>
  185. <div class="col col-sum u-l">3555元</div>
  186. </div>
  187. <div class="item-box">
  188. <div class="col col-check u-l">
  189. <input type="checkbox" class="check single" />
  190. </div>
  191. <div class="col col-img u-l">
  192. <img src="./images/2.png" alt="" />
  193. </div>
  194. <div class="col col-name u-l">
  195. 佳能(Canon)E478无线学生彩色喷墨多功能一体机
  196. </div>
  197. <div class="col col-price u-l">459元</div>
  198. <div class="col col-num u-l">
  199. <div class="change-goods-num">
  200. <a href="javascript:;" class="jianhao">-</a>
  201. <input type="text " value="1" />
  202. <a href="javascript:;" class="jiahao">+</a>
  203. </div>
  204. </div>
  205. <div class="col col-sum u-l">459元</div>
  206. </div>
  207. <div class="item-box">
  208. <div class="col col-check u-l">
  209. <input type="checkbox" class="check single" />
  210. </div>
  211. <div class="col col-img u-l">
  212. <img src="./images/3.jpg" alt="" />
  213. </div>
  214. <div class="col col-name u-l">毕亚兹 无线投屏器 4K高清</div>
  215. <div class="col col-price u-l">599元</div>
  216. <div class="col col-num u-l">
  217. <div class="change-goods-num">
  218. <a href="javascript:;" class="jianhao">-</a>
  219. <input type="text" value="1" />
  220. <a href="javascript:;" class="jiahao">+</a>
  221. </div>
  222. </div>
  223. <div class="col col-sum u-l">599元</div>
  224. </div>
  225. <div class="item-box">
  226. <div class="col col-check u-l">
  227. <input type="checkbox" class="check single" />
  228. </div>
  229. <div class="col col-img u-l">
  230. <img src="./images/4.jpg" alt="" />
  231. </div>
  232. <div class="col col-name u-l">联想ThinkBook16+笔记本电脑</div>
  233. <div class="col col-price u-l">5699元</div>
  234. <div class="col col-num u-l">
  235. <div class="change-goods-num">
  236. <a href="javascript:;" class="jianhao">-</a>
  237. <input type="text" value="1" />
  238. <a href="javascript:;" class="jiahao">+</a>
  239. </div>
  240. </div>
  241. <div class="col col-sum u-l">5699元</div>
  242. </div>
  243. </div>
  244. </div>
  245. <!-- 购物车底部 -->
  246. <div class="cart-foot">
  247. <div class="section-left u-l">
  248. <span>已选择 <i id="totalNum">0</i> 件商品</span>
  249. </div>
  250. <div class="total-price">合计: <em id="totalPrice">0</em></div>
  251. </div>
  252. </div>
  253. <script>
  254. //获取到页面中所有复选框check
  255. let check = document.querySelectorAll(".check");
  256. console.log(check.length);
  257. //获取到商品栏复选框
  258. let single = document.querySelectorAll(".single");
  259. console.log(single.length);
  260. //获取每一行商品栏
  261. let itemBox = document.querySelectorAll(".item-box");
  262. console.log(itemBox);
  263. for (let i = 0; i < check.length; i++) {
  264. //给所有复选框添加事件
  265. check[i].onclick = function (e) {
  266. //判断是否全选
  267. let count = 0;
  268. //判断全选框
  269. if (e.target.getAttribute("id") == "all") {
  270. //把全选状态赋值给每一个checkbox
  271. for (j = 0; j < single.length; j++) {
  272. single[j].checked = this.checked;
  273. }
  274. }
  275. for (let k = 0; k < single.length; k++) {
  276. if (single[k].checked) {
  277. count++;
  278. }
  279. if (count == single.length) {
  280. check[0].checked = true;
  281. } else {
  282. check[0].checked = false;
  283. }
  284. }
  285. fTotal();
  286. };
  287. }
  288. //给商品每一行添加事件
  289. for (let i = 0; i < itemBox.length; i++) {
  290. itemBox[i].onclick = function (e) {
  291. let input = this.getElementsByTagName("input")[1];
  292. switch (e.target.className) {
  293. case "jiahao":
  294. // alert('加');
  295. input.value = parseInt(input.value) + 1;
  296. fTotalSum(this);
  297. break;
  298. case "jianhao":
  299. // alert('减');
  300. input.value =
  301. parseInt(input.value) - 1 <= 1 ? 1 : parseInt(input.value) - 1;
  302. fTotalSum(this);
  303. break;
  304. }
  305. //调用 计算总数量和总价
  306. fTotal();
  307. };
  308. }
  309. // 定义一个函数计算 小计 That === this 就是商品每一行
  310. function fTotalSum(That) {
  311. //获取当前行的数量
  312. let num = That.getElementsByTagName("input")[1].value;
  313. //获取当前行的单价 取整是为了省略掉'元'字符串,方便计算
  314. let price = parseInt(That.querySelector(".col-price").innerHTML);
  315. // 最终小计值为数量乘以单价
  316. That.querySelector(".col-sum").innerHTML = num * price + "元";
  317. }
  318. //定义一个函数 方便调用总数量 和 合计
  319. function fTotal() {
  320. //获取到总价节点
  321. let totalPrice = document.getElementById("totalPrice");
  322. //总价
  323. let price = 0;
  324. //获取到总件节点
  325. let totalNum = document.getElementById("totalNum");
  326. //数量总和
  327. let Num = 0;
  328. //获取每一行商品盒子
  329. let itemBox = document.querySelectorAll(".item-box");
  330. for (let i = 0; i < itemBox.length; i++) {
  331. itemBox[i].getElementsByTagName("input")[1].value;
  332. //选中了,才拿数量和价格
  333. if (itemBox[i].getElementsByTagName("input")[0].checked) {
  334. Num += parseInt(itemBox[i].getElementsByTagName("input")[1].value);
  335. price += parseInt(itemBox[i].querySelector(".col-sum").innerHTML);
  336. }
  337. }
  338. //合并把总和数量写到标签里
  339. totalNum.innerHTML = Num;
  340. totalPrice.innerHTML = price;
  341. }
  342. </script>
  343. </body>
  344. </html>

JSON交互原理与JSON的优势

JSON是一种基于文本的数据交换方式,也叫做数据描述格式。
JSON的优点:
1) 基于纯文本,跨平台传递极其简单;
2) json是通用的,轻量化的 "数据交互格式",用于 "前后端数据通信"
3) json独立于编程语言,本质是一个格式化字符串
4) json借用了js对象字面量的语法,简洁高效,已替代了传统的xml格式
5) json不是js对象, 但它可以与js对象之间相互转换
JSON的格式/规则:
JSON能够以非常简单的方式来描述数据结构,XML能做的它都能做,因此在跨平台方面两者均可实现。
1) JSON只有两种数据类型描述符,大括号{}和方括号[],其余英文冒号:是映射符,英文逗号,是分隔符,英文双引号""是定义符
2) 大括号{}用来描述一组“不同类型的无序键值对集合”,方括号[]用来描述一组“相同类型的有序数据集合”。
3) 上述两种集合中若有多个子项,则通过英文逗号,进行分隔。
4) 键值对以英文冒号:进行分隔,并且建议键名都加上英文双引号””,以便于不同语言的解析。
5) JSON内部常用数据类型无非就是字符串、数字、布尔、日期、null这几个,字符串必须用双引号引起来,其余的都不用。

实例演示JSON常用的两个API

运行效果

JSON常用的两个API代码

  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>json的常用两个api</title>
  8. </head>
  9. <body>
  10. <script>
  11. console.log(
  12. "----------------------JS对象转换JSON----------------------------"
  13. );
  14. const user = {
  15. text: "Json常用api",
  16. name: "早晨",
  17. date: "2022-7-31",
  18. };
  19. console.log(user);
  20. console.log(typeof user);
  21. let json = JSON.stringify(user);
  22. console.log(json);
  23. console.log(typeof json);
  24. console.log(
  25. "----------------------JSON转换JS对象-------------------------------"
  26. );
  27. let str = `{
  28. "title": "发布的标题",
  29. "name": "发布者",
  30. "catid": "分类信息"
  31. }`;
  32. console.log(str);
  33. console.log(typeof str);
  34. let item = JSON.parse(str);
  35. console.log(item);
  36. console.log(typeof item);
  37. </script>
  38. </body>
  39. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议