定制开发jQuery购物车完整功能实现,全代码详解(有动态效果图)

 

目录


 

一、效果展示 :

 二、定制开发主要功能介绍:

1、定制开发点击商品数量左右按钮定制开发能实现加减商品件数、定制开发当前商品后面"小计"(总价)定制开发的不断计算并变化

2、可以在"件数"定制开发中自定义输入商品件数,定制开发并自动计算该商品总价。

3、定制开发当商品点击左右按钮加减件数、定制开发在输入框中自定义输入定制开发件数的时候,定制开发能在下方的总计列中显定制开发示所有商品的件数、定制开发所有商品的价格。

4、定制开发点击全选按钮能将所有定制开发商品前面的复选框选中,定制开发再点击又全不选中。

5、定制开发点击每个商品前面的复选框按钮,定制开发如果所有商品全部选中,定制开发自动将全选按钮赋值为选中状态。

6、在所有商品全部选中状态下,取消一个商品的选中状态,全选按钮自动赋值为不选中状态。

7、点击后面每个商品的"删除"按钮能删除当前商品。

8、商品选中状态下(几个或全选),点击左下方的”删除“按钮能批量删除所选商品。

9、如果当前商品前面的复选框处于选中状态,就给他添加一个类,让他的背景颜色更加突出;如果变为非选中状态,删除他刚添加的类,让其恢复到原有的背景色。

10、在商品增加、删除、修改时都能自动的在最下方列总计的  总件数 和 总价 修改 

三、html代码:

这一部分不是重点,重点是学习jQuery,所以不太讲究过于精美,望各位不要介意~

这一部分,注意关注结构和类名,以便于后面的学习!

  1. <body>
  2. <div class="container w">
  3. <div class="row">
  4. <nav>
  5. <ul>
  6. <li>首页</li>
  7. <li>服装</li>
  8. <li>手机</li>
  9. <li>电脑</li>
  10. <li>日用</li>
  11. <li>注册</li>
  12. <li>登录</li>
  13. </ul>
  14. </nav>
  15. </div>
  16. <div class="row w">
  17. <div class="cart-head">
  18. <div class="select-all">
  19. <input type="checkbox" name="" id=""> 全选
  20. </div>
  21. <div class="commodity">商品</div>
  22. <div class="price">价格</div>
  23. <div class="num">数量</div>
  24. <div class="sum">小计</div>
  25. <div class="operation">操作</div>
  26. </div>
  27. </div>
  28. <!-- 商品详细模块 -->
  29. <div class="row w">
  30. <div class="cart-content">
  31. <div class="item">
  32. <input type="checkbox" name="" id="checkbox">
  33. <div class="box">
  34. <img src="images/1.jpg" alt="">
  35. <p>月亮与六便士正版书籍 毛姆经典作品青少 世界经典文学名著书籍畅销书排行榜</p>
  36. </div>
  37. <div class="item-price">¥12.60</div>
  38. <div class="item-num">
  39. <span class="left">-</span>
  40. <input type="text" value="1" class="nums">
  41. <span class="right">+</span>
  42. </div>
  43. <div class="item-sum">¥12.60</div>
  44. <div class="item-opration">删除</div>
  45. </div>
  46. <div class="item">
  47. <input type="checkbox" name="" id="checkbox">
  48. <div class="box">
  49. <img src="images/2.jpg" alt="">
  50. <p>月亮与六便士正版书籍 毛姆经典作品青少 世界经典文学名著书籍畅销书排行榜</p>
  51. </div>
  52. <div class="item-price">¥25.80</div>
  53. <div class="item-num">
  54. <span class="left">-</span>
  55. <input type="text" value="1" class="nums">
  56. <span class="right">+</span>
  57. </div>
  58. <div class="item-sum">¥25.80</div>
  59. <div class="item-opration">删除</div>
  60. </div>
  61. <div class="item">
  62. <input type="checkbox" name="" id="checkbox">
  63. <div class="box">
  64. <img src="images/3.jpg" alt="">
  65. <p>月亮与六便士正版书籍 毛姆经典作品青少 世界经典文学名著书籍畅销书排行榜</p>
  66. </div>
  67. <div class="item-price">¥32.10</div>
  68. <div class="item-num">
  69. <span class="left">-</span>
  70. <input type="text" value="1" class="nums">
  71. <span class="right">+</span>
  72. </div>
  73. <div class="item-sum">¥32.10</div>
  74. <div class="item-opration">删除</div>
  75. </div>
  76. <div class="item">
  77. <input type="checkbox" name="" id="checkbox">
  78. <div class="box">
  79. <img src="images/4.jpg" alt="">
  80. <p>月亮与六便士正版书籍 毛姆经典作品青少 世界经典文学名著书籍畅销书排行榜</p>
  81. </div>
  82. <div class="item-price">¥22.40</div>
  83. <div class="item-num">
  84. <span class="left">-</span>
  85. <input type="text" value="1" class="nums">
  86. <span class="right">+</span>
  87. </div>
  88. <div class="item-sum">¥22.40</div>
  89. <div class="item-opration">删除</div>
  90. </div>
  91. </div>
  92. </div>
  93. <!-- 商品总计 -->
  94. <div class="row w">
  95. <div class="cart-footer">
  96. <!-- 全选 -->
  97. <div class="select-all">
  98. <input type="checkbox" name="" id="">
  99. <span>全选</span>
  100. </div>
  101. <div class="footer-total">总计</div>
  102. <div class="footer-num">
  103. <span>1</span>
  104. </div>
  105. <div class="footer-sum">¥14.30</div>
  106. <div class="footer-opration">删除</div>
  107. </div>
  108. </div>
  109. </div>
  110. </body>

四:css代码:

这一部分不是重点,自己练习写就可以~

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. /* nav */
  6. input {
  7. outline: none;
  8. }
  9. nav {
  10. width: 1070px;
  11. height: 80px;
  12. background-color: #e9e6b8;
  13. margin-bottom: 20px;
  14. line-height: 80px;
  15. padding: 0 40px;
  16. }
  17. nav ul {
  18. width: 1100px;
  19. }
  20. nav ul li {
  21. float: left;
  22. list-style: none;
  23. width: 170px;
  24. height: 60px;
  25. font-size: 20px;
  26. }
  27. nav ul li:nth-child(6) {
  28. margin-left: 60px;
  29. }
  30. nav ul li:nth-child(6),
  31. nav ul li:nth-child(7) {
  32. width: 60px;
  33. font-size: 16px;
  34. }
  35. .current {
  36. background-color: #e0dfd7;
  37. }
  38. /* 购物车主体 */
  39. div {
  40. box-sizing: border-box;
  41. }
  42. .cart-head {
  43. width: 1070px;
  44. height: 50px;
  45. background-color: #eeeddd;
  46. padding-top: 15px;
  47. padding-left: 10px;
  48. }
  49. .cart-head div,
  50. .cart-head input {
  51. float: left;
  52. }
  53. .cart-head input[type=checkbox] {
  54. margin-right: 3px;
  55. }
  56. .commodity {
  57. margin-left: 100px;
  58. }
  59. .price {
  60. margin-left: 300px;
  61. }
  62. .num,
  63. .sum,
  64. .operation {
  65. margin-left: 100px;
  66. }
  67. /* 商品内容模块 */
  68. .cart-content {
  69. margin-top: 10px;
  70. }
  71. .cart-content .item {
  72. width: 1070px;
  73. height: 200px;
  74. border-top: 1px solid #ccc;
  75. margin-bottom: 10px;
  76. padding-left: 10px;
  77. }
  78. .item .box {
  79. float: left;
  80. width: 300px;
  81. height: 100px;
  82. margin-left: 50px;
  83. margin-top: 50px;
  84. }
  85. .cart-content .item input {
  86. display: block;
  87. float: left;
  88. margin-top: 90px;
  89. background-color: #ccc;
  90. }
  91. .item .box img {
  92. width: 145px;
  93. float: left;
  94. margin-right: 5px;
  95. }
  96. .item .box p {
  97. text-indent: 2em;
  98. width: 145px;
  99. float: left;
  100. font-size: 12px;
  101. }
  102. .item>div {
  103. float: left;
  104. margin-top: 100px;
  105. }
  106. .item-price {
  107. margin-left: 107px;
  108. }
  109. .item-num {
  110. margin-left: 70px;
  111. }
  112. .item-sum {
  113. margin-left: 72px;
  114. }
  115. .item-opration {
  116. margin-left: 90px;
  117. }
  118. .item-num span {
  119. display: block;
  120. width: 15px;
  121. height: 20px;
  122. float: left;
  123. border: 1px solid #ccc;
  124. margin-top: 0px;
  125. text-align: center;
  126. line-height: 17px;
  127. }
  128. .item .item-num .nums {
  129. float: left;
  130. width: 35px;
  131. height: 20px;
  132. border: 1px solid #ccc;
  133. text-align: center;
  134. font-size: 12px;
  135. line-height: 20px;
  136. margin-top: 0;
  137. }
  138. /* 总计 */
  139. .cart-footer {
  140. width: 1070px;
  141. height: 100px;
  142. background-color: #eeeddd;
  143. line-height: 90px;
  144. padding-left: 10px;
  145. }
  146. .cart-footer .select-all input {
  147. vertical-align: middle;
  148. margin-top: -2px;
  149. }
  150. .cart-footer .select-all span {
  151. vertical-align: middle;
  152. display: inline-block;
  153. }
  154. .cart-footer>div {
  155. float: left;
  156. line-height: 100px;
  157. }
  158. .footer-total {
  159. margin-left: 435px;
  160. }
  161. .footer-price {
  162. margin-left: 70px;
  163. }
  164. .footer-num {
  165. margin-left: 105px;
  166. }
  167. .footer-sum {
  168. margin-left: 95px;
  169. }
  170. .footer-opration {
  171. margin-left: 95px;
  172. }
  173. .w {
  174. width: 1070px!important;
  175. }

五、核心步骤:

在看jquery代码的前面或过程中可以看一下步骤的分析,对代码的理解特别有帮助!

 

 

 

 

 

 

 

六、jQuery代码(重点)

我写的注释特别详细,特别多,在这我也就不啰嗦了,大伙有我写的不清楚的或不太完美的,希望各位多多指教~

  1. $(function() {
  2. // 给nav导航栏中的li添加悬浮变字体颜色的效果(完全可以不用做)
  3. $("nav li").stop().mouseenter(function() {
  4. $(this).css('color', 'red');
  5. }).stop().mouseleave(function() {
  6. $(this).css('color', '#000');
  7. })
  8. getPriceSum();
  9. // 让全选按钮的checked属性的状态和所有item的复选框状态一致
  10. // checked属性改变之后触发
  11. $(".select-all input").change(function() {
  12. // 获取它的状态,给所有的item里面的复选框赋值
  13. var check = $(this).prop('checked');
  14. // 让每个小项目和全选按钮同时改变值,否则点击最上面全选按钮,最下面全选按钮选不上
  15. $(".item input,.select-all input").prop('checked', check);
  16. // 当全选按钮发生改变,如果是选中状态给所有的item加current类
  17. if (check) {
  18. $('.item').addClass('current');
  19. } else {
  20. $('.item').removeClass('current');
  21. }
  22. });
  23. // 点击下面每个项目中的复选框,如果复选框都选上了,让上面下面的全选按钮也选上;
  24. // 如果没都选上,就让全选按钮处于没选中状态。
  25. $(".item input").change(function() {
  26. // 如果所有item中复选框被选中的数目等于总数,就让让全选按钮也选上
  27. // $(".item input:checked"):被选中的个数,但他是以伪元素形式输出,再加上.length即可
  28. if ($(".item input:checked").length == $(".item").length) {
  29. $(".select-all input").prop('checked', true);
  30. } else if ($(".item input:checked").length < $(".item").length) {
  31. $(".select-all input").prop('checked', false);
  32. }
  33. // 当点击每个item前面的复选框按钮时,如果是选中状态就添加current类
  34. var check = $(this).prop('checked');
  35. if (check) {
  36. $(this).parents('.item').addClass('current');
  37. } else {
  38. $(this).parents('.item').removeClass('current');
  39. }
  40. });
  41. // 增加商品数量模块,点击加号时,让当前商品数量++
  42. $(".item .right").click(function() {
  43. var num = $(this).siblings('.nums').val();
  44. num++;
  45. $(this).siblings('.nums').val(num);
  46. // 点击右侧按钮时候,当前的商品后面的小计也要做相应的改变
  47. // 把价格中的数字截取出来*数目,再赋值给小计,赋值时+"¥"。
  48. var price = $(this).parents('.item-num').siblings('.item-price').text().substr(1);
  49. // 计算结果,保留两位小数
  50. var sum = (price * num).toFixed(2);
  51. // 给他爹的兄弟赋值
  52. $(this).parents('.item-num').siblings('.item-sum').text("¥" + sum);
  53. getsum();
  54. getPriceSum();
  55. });
  56. // 减少商品,当点击左按钮时,先获取再--,最后赋值;到了1就不能再减了。
  57. $(".item .left").click(function() {
  58. var num = $(this).siblings('.nums').val();
  59. if (num <= 1) {
  60. return false;
  61. }
  62. num--;
  63. $(this).siblings('.nums').val(num);
  64. // 点击左侧按钮时候,当前的商品后面的小计也要做相应的改变
  65. // 把价格中的数字截取出来*数目,再赋值给小计,赋值时+"¥"。
  66. var price = $(this).parents('.item-num').siblings('.item-price').text().substr(1);
  67. // 计算结果,保留两位小数
  68. var sum = (price * num).toFixed(2);
  69. // 给他爹的兄弟赋值
  70. $(this).parents('.item-num').siblings('.item-sum').text("¥" + sum);
  71. getsum();
  72. getPriceSum();
  73. });
  74. // 当用户在input件数,输入框中自定义输入数字时,也要修改小计
  75. $(".item .nums").change(function() {
  76. var num = $(this).val();
  77. // 如果输入的数值小于1,先给它赋值为1,并把总价格赋值为单价
  78. if (num < 1) {
  79. $(this).val(1);
  80. // 获取当前价格
  81. var price = $(this).parents('.item-num').siblings('.item-price').text().substr(1);
  82. // 给item后面的总价赋值.toFixed()方法前面必须是数字类型的才行
  83. price = parseFloat(price);
  84. $(this).parents('.item-num').siblings('.item-sum').text("¥" + (price).toFixed(2));
  85. getsum();
  86. getPriceSum();
  87. return false;
  88. }
  89. // 获取价格值
  90. var price = $(this).parents('.item-num').siblings('.item-price').text().substr(1);
  91. // 计算结果,保留两位小数
  92. var sum = (price * num).toFixed(2);
  93. // 给他爹的兄弟赋值
  94. $(this).parents('.item-num').siblings('.item-sum').text("¥" + sum);
  95. getsum();
  96. getPriceSum();
  97. })
  98. // 计算总计,当点击加号或减号,或更改input文本框时触发,因多次使用所以封装函数
  99. function getsum() {
  100. var sum = 0;
  101. $(".item .nums").each(function(i, domele) {
  102. var num = 0;
  103. // $(domele).val()是字符型,需要转化为数值型
  104. num = parseInt($(domele).val());
  105. sum += num;
  106. })
  107. // 给总计里面的数目赋值
  108. $(".footer-num span").text(sum);
  109. }
  110. // 计算总额,先获取当前item的商品数目*当前item的价格,再遍历相加,最后赋值,因多次使用所以封装函数
  111. function getPriceSum() {
  112. var priceSum = 0;
  113. $(".item .nums").each(function(i, domele) {
  114. // 获取当前元素的件数
  115. var num = parseInt($(domele).val());
  116. // 获取当前元素的价格
  117. var price = parseFloat($(this).parents('.item-num').siblings('.item-price').text().substr(1));
  118. priceSum += (num * price);
  119. })
  120. priceSum = priceSum.toFixed(2);
  121. // 给总价赋值
  122. $(".footer-sum").text('¥' + priceSum);
  123. }
  124. // 用户点击每个item后面的删除按钮时,删除当前item
  125. $(".item .item-opration").click(function() {
  126. $(this).parents(".item").remove();
  127. isChecked();
  128. getPriceSum();
  129. getsum();
  130. })
  131. // 当点击footer里面的删除时,删除勾选前面复选框的item
  132. $(" .footer-opration").click(function() {
  133. // 判断每个item前面的复选框是否被选中,如果选中删除他所对应的item即可
  134. $(".item #checkbox:checked").parents(".item").remove();
  135. isChecked();
  136. getPriceSum();
  137. getsum();
  138. })
  139. // 如果内容区域的item的数目等于0,就取消全选按钮的选中状态
  140. isChecked();
  141. function isChecked() {
  142. if ($(".item").length == 0) {
  143. $(".select-all input").prop('checked', false);
  144. }
  145. }
  146. })

七、感谢

最后一直都是跟着的pink老师学习的,黑马很好,希望大家多多支持他!

 

 

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发