当前位置:   article > 正文

微信小程序(五)购物车_微信小程序购物车

微信小程序购物车

shoppingcart.wxml

  1. <!--pages/shoppingcart/shoppingcart.wxml-->
  2. <view class="content">
  3. <view class="info">
  4. <view class="line"></view>
  5. <view class="receive">
  6. 购物
  7. </view>
  8. <view class="line"></view>
  9. <view class="items">
  10. <checkbox-group bindchange="checkboxChange">
  11. <block wx:for="{{orders}}">
  12. <view class="item">
  13. <view class="icon">
  14. <label for="{{item.id}}">
  15. <checkbox id="{{item.id}}" value="{{item.id}}" checked=
  16. "{{item.selected}}" hidden/>
  17. <icon type="{{item.selected==true?'success':'circle'}}"
  18. color="#E4393C" data-value="{{item.id}}" size="20" />
  19. </label>
  20. </view>
  21. <view class="pic">
  22. <image src="{{item.pic}}" style="width:80px;height:80px;">
  23. </image>
  24. </view>
  25. <view class="order">
  26. <view class="title">{{item.name}}</view>
  27. <view class="desc">
  28. <view>数量: {{item.quantity}}</view>
  29. </view>
  30. <view class="priceInfo">
  31. <view class="price">¥{{item.nowPrice}}</view>
  32. <view class="minus" id="{{item.id}}" bindtap="minusOrders">-</view>
  33. <view class="count">{{item.quantity}}</view>
  34. <view class="add" id="{{item.id}}" bindtap="addOrders">+
  35. </view>
  36. </view>
  37. </view>
  38. </view>
  39. <view class="line"></view>
  40. </block>
  41. </checkbox-group>
  42. <checkbox-group bindchange="checkAll">
  43. <view class="totalInfo">
  44. <view class="all">
  45. <view>
  46. <label for="boxAll">
  47. <checkbox checked="{{selectedAll}}" id="boxAll" hidden/>
  48. <icon type="{{selectedAll==true?'success':'circle'}}"
  49. color="#E4393C" data-value="{{item.id}}" size="20" />
  50. </label>
  51. </view>
  52. <view>
  53. 全选
  54. </view>
  55. </view>
  56. <view class="amount">
  57. <view class="total">
  58. 总计:¥{{totalPrice}}元
  59. </view>
  60. <view>
  61. 不含运费,已优惠¥0.00
  62. </view>
  63. </view>
  64. <view class="opr">去结算</view>
  65. </view>
  66. </checkbox-group>
  67. </view>
  68. </view>
  69. </view>

shoppingcart.js

  1. // pages/shoppingcart/shoppingcart.js
  2. Page({
  3. data:{
  4. orders: [], //加人到购物车里的商品集合
  5. selectedAll:false, //全选按钮标志位,true 代表全选选中,false代表全选未选中
  6. totalPrice:0 //总金额
  7. },
  8. onLoad:function (options) {
  9. this.loadOrders();
  10. wx.setNavigationBarTitle({ //动态修改页面标题文字
  11. title: '购物车'
  12. })
  13. wx.setNavigationBarColor({
  14. frontColor: '#000000', //导航文字颜色
  15. backgroundColor: '#ffffff', //导航背景色
  16. animation: { //动画效果
  17. duration: 400,
  18. timingFunc: 'easeIn'
  19. }
  20. })
  21. },
  22. loadOrders:function () { //加载购物车里的商品
  23. var orders = wx.getStorageSync('orders'); //从本地级存数据orders里获取数据
  24. var newOrders = [];
  25. var totalPrice = 0;
  26. var selectedAll = true;
  27. for (var i = 0; i < orders.length; i++) {
  28. var order = orders[i];
  29. if (order.selected) { //购物车里的每件商品都有一个selected属性,selected等于true时代表这件商品被选中,要计算金额
  30. totalPrice += order.nowPrice * order.quantity; //计算选中商品的金额
  31. } else {
  32. selectedAll = false; //购物车里的商品,如果有一一件是未选中的,selectedAll全选标志位就等于false
  33. }
  34. newOrders.push(order);
  35. }
  36. wx.setStorageSync("orders", newOrders); //重新加入缓存
  37. this.setData({totalPrice:totalPrice,orders:newOrders,selectedAll: selectedAll});//数据绑定到页面里
  38. },
  39. checkboxChange: function (e) { //每件商品前的复选框操作函数
  40. var ids = e.detail.value; //会把选中的复选框的id值,以数组集合的形式传递过来
  41. var orders = wx.getStorageSync('orders');
  42. var totalPrice = 0;
  43. var newOrders = [];
  44. for (var i = 0; i < orders.length; i++) {
  45. var order = orders[i];
  46. var flag = true;
  47. for (var j = 0; j < ids.length; j++) {
  48. if (order.id == ids[j]) { //传递过来的ids数组集合值,都是选中的 商品,需要计算总的金额
  49. totalPrice += order.nowPrice * order.quantity;
  50. order.selected = true; //代表该商 品是选中状态
  51. flag = false; //代表该商品是选中状态
  52. }
  53. }
  54. if (flag) { //代表该商品是未选中状态
  55. order.selected = false;
  56. }
  57. newOrders.push(order);
  58. }
  59. wx.setStorageSync("orders", newOrders); //重新加人缓存数据
  60. this.loadOrders();//重新加载页面
  61. },
  62. checkAll: function (e) { //全选复选框操作函数
  63. var orders = wx.getStorageSync("orders");
  64. console.log(e);
  65. var newOrders = [];
  66. var selectedAll = this.data.selectedAll;
  67. for (var i = 0; i < orders.length; i++) {
  68. var order = orders[i];
  69. if (selectedAll) { //如果当前状态值是全选中, 那么再单击的时候,全选复选框应该为未选中状态
  70. order.selected = false;
  71. } else {
  72. order.selected = true;
  73. }
  74. newOrders.push(order);
  75. }
  76. wx.setStorageSync("orders", newOrders) //重新加入缓存数据
  77. this.loadOrders(); //重新加载页面
  78. },
  79. addOrders: function (e) { //添加商品数量 函数
  80. var id = e.currentTarget.id;
  81. var orders = wx.getStorageSync('orders');
  82. var addOrders = new Array();
  83. for (var i = 0; i < orders.length; i++) {
  84. var order = orders[i];
  85. if (order.id == id) {
  86. var quantity = order.quantity;
  87. order.quantity = quantity + 1; //将该件商品数量加1
  88. }
  89. addOrders[i] = order;
  90. }
  91. wx.setStorageSync('orders', addOrders); //重新加人缓存数据
  92. this.loadOrders(); //重新加载页面
  93. },
  94. minusOrders: function (e) { //减少商品数量函数
  95. console.log(e);
  96. var id = e.currentTarget.id;
  97. var orders = wx.getStorageSync('orders');
  98. var addOrders = new Array();
  99. var add = true;
  100. for (var i = 0; i < orders.length; i++) {
  101. var order = orders[i];
  102. if (order.id == id) {
  103. var count = order.quantity;
  104. if (count >= 2) {
  105. order.quantity = count - 1; //将该件商 品数量减1
  106. }
  107. }
  108. addOrders[i] = order;
  109. }
  110. wx.setStorageSync('orders', addOrders); //重新加人缓存数据
  111. this.loadOrders(); //重新加载页面
  112. }
  113. })

shoppingcart.wxss

  1. /* pages/shoppingcart/shoppingcart.wxss */
  2. .content {
  3. font-family: "Microsoft YaHei";
  4. height: 600px;
  5. background-color: #F9F9F8;
  6. }
  7. .info {
  8. background-color: #ffffff;
  9. }
  10. .line {
  11. border: 1px solid #CCCCCC;
  12. opacity: 0.2;
  13. }
  14. .receive {
  15. display: flex;
  16. flex-direction: row;
  17. padding: 10px;
  18. }
  19. .item {
  20. display: flex;
  21. flex-direction: row;
  22. padding: 10px;
  23. align-items: center;
  24. }
  25. .order {
  26. width: 100%;
  27. height: 87px;
  28. }
  29. .title {
  30. font-size: 15px;
  31. }
  32. .desc {
  33. display: flex;
  34. flex-direction: row;
  35. font-size: 13px;
  36. color: #cccccc;
  37. }
  38. .desc view {
  39. margin-right: 10px;
  40. }
  41. .priceInfo {
  42. display: flex;
  43. flex-direction: row;
  44. margin-top: 10px;
  45. }
  46. .price {
  47. width: 65%;
  48. font-size: 15px;
  49. color: #ff0000;
  50. text-align: left;
  51. }
  52. .minus,
  53. .add {
  54. border: 1px solid #cccccC;
  55. width: 25px;
  56. text-align: center;
  57. }
  58. .count {
  59. border-top: 1px solid #cccccc;
  60. border-bottom: 1px solid #cCCCCC;
  61. width: 40px;
  62. text-align: center;
  63. }
  64. .totalInfo {
  65. display: flex;
  66. flex-direction: row;
  67. height: 60px;
  68. }
  69. .all {
  70. align-items: center;
  71. Padding-left: 10px;
  72. width: 20%;
  73. font-size: 12px;
  74. margin-top: 10px;
  75. }
  76. .amount {
  77. width: 50%;
  78. font-size: 13px;
  79. text-align: right;
  80. }
  81. .total {
  82. font-size: 16px;
  83. color: #ff0000;
  84. font-weight: bold;
  85. margin-bottom: 10px;
  86. }
  87. .opr {
  88. position: absolute;
  89. right: 0px;
  90. width: 92px;
  91. font-size: 15px;
  92. font-weight: bold;
  93. background-color: #E4393C;
  94. height: 60px;
  95. text-align: center;
  96. line-height: 60px;
  97. color: #ffffff;
  98. }
  99. .icon {
  100. margin-right: 10px;
  101. }

效果图

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/517126
推荐阅读
相关标签
  

闽ICP备14008679号