zoukankan      html  css  js  c++  java
  • 微信小程序之 ShoppingCart(购物车)

    1.项目目录

    2.逻辑层

    group.js

    // pages/group/group.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        goodslist: [
          {
            id: "001",
            imgUrl: "http://img5.imgtn.bdimg.com/it/u=2906541843,1492984080&fm=23&gp=0.jpg",
            name: "女装T恤中长款大码摆裙春夏新款",
            price: "65.00"
          },
          {
            id: "002",
            imgUrl: "http://img4.imgtn.bdimg.com/it/u=1004404590,1607956492&fm=23&gp=0.jpg",
            name: "火亮春秋季 男青年修身款圆领男士T恤",
            price: "68.00"
          },
          {
            id: "003",
            imgUrl: "http://img1.imgtn.bdimg.com/it/u=2305064940,3470659889&fm=23&gp=0.jpg",
            name: "新款立体挂脖t恤女短袖大码宽松条纹V领上衣显瘦休闲春夏",
            price: "86.00"
          },
          {
            id: "004",
            imgUrl: "http://img4.imgtn.bdimg.com/it/u=3986819380,1610061022&fm=23&gp=0.jpg",
            name: "男运动上衣春季上新品 上衣流行装青年",
            price: "119.00"
          },
          {
            id: "005",
            imgUrl: "http://img1.imgtn.bdimg.com/it/u=3583238552,3525141111&fm=23&gp=0.jpg",
            name: "时尚字母三角露胸t恤女装亮丝大码宽松不规则春夏潮",
            price: "69.00"
          },
          {
            id: "006",
            imgUrl: "http://img2.imgtn.bdimg.com/it/u=1167272381,3361826143&fm=23&gp=0.jpg",
            name: "新款立体挂脖t恤短袖大码宽松条纹V领上衣显瘦休闲春夏",
            price: "86.00"
          },
          {
            id: "007",
            imgUrl: "http://img0.imgtn.bdimg.com/it/u=789486313,2033571593&fm=23&gp=0.jpg",
            name: "时尚字母三角露胸t恤女装亮丝大码宽松不规则春夏潮",
            price: "119.00"
          },
          {
            id: "008",
            imgUrl: "http://img2.imgtn.bdimg.com/it/u=3314044863,3966877419&fm=23&gp=0.jpg",
            name: "男运动上衣春季上新品 上衣流行装青年",
            price: "69.00"
          },
        ]
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
      
      },
    
      // 加入购物车  
      addcart: function (e) {
        this.setData({
          toastHidden: false
        });
        // 遍历列表 与 购物车列表  
        for (var i in this.data.goodslist) {
          // 列表中某一项item的id == 点击事件传递过来的id。则是被点击的项  
          if (this.data.goodslist[i].id == e.target.id) {
            // 给goodsList数组的当前项添加count元素,值为1,用于记录添加到购物车的数量  
            this.data.goodslist[i].count = 1;
            // 获取购物车的缓存数组(没有数据,则赋予一个空数组)  
            var arr = wx.getStorageSync('cart') || [];
            // 如果购物车有数据  
            if (arr.length > 0) {
              // 遍历购物车数组  
              for (var j in arr) {
                // 判断购物车内的item的id,和事件传递过来的id,是否相等  
                if (arr[j].id == e.target.id) {
                  // 相等的话,给count+1(即再次添加入购物车,数量+1)  
                  arr[j].count = arr[j].count + 1;
                  // 最后,把购物车数据,存放入缓存(此处不用再给购物车数组push元素进去,因为这个是购物车有的,直接更新当前数组即可)  
                  try {
                    wx.setStorageSync('cart', arr)
                  } catch (e) {
                    console.log(e)
                  }
                  // 返回(在if内使用return,跳出循环节约运算,节约性能)  
                  return;
                }
              }
              // 遍历完购物车后,没有对应的item项,把goodslist的当前项放入购物车数组  
              arr.push(this.data.goodslist[i]);
            }
            // 购物车没有数据,把item项push放入当前数据(第一次存放时)  
            else {
              arr.push(this.data.goodslist[i]);
            }
            // 最后,把购物车数据,存放入缓存  
            try {
              wx.setStorageSync('cart', arr)
              // 返回(在if内使用return,跳出循环节约运算,节约性能)  
              return;
            } catch (e) {
              console.log(e)
            }
          }
        }
      }
    })

    3.页面布局

    group.wxml

    <!--pages/group/group.wxml-->
    <!--主盒子-->  
    <view class="container">  
      <!--head-->  
      <view class="tit">  
        <view class="title_val">商品列表</view>  
        <view class="more">更多</view>  
      </view>  
      <!--list-->  
      <view class="goodslist">  
        <!--item-->  
        <block wx:for="{{goodslist}}" wx:key="id">  
          <view class="goods">  
            <!--左侧图片盒子-->  
            <view>  
              <image src="{{item.imgUrl}}" class="good-img" />  
            </view>  
            <!--右侧说明部分-->  
            <view class="good-cont">  
              <!--上--文字说明-->  
              <view class="goods-navigator">  
                <text class="good-name">{{item.name}}</text>  
              </view>  
              <!--下--价格部分-->  
              <view class="good-price">  
                <text>¥{{item.price}}</text>  
                <image id="{{item.id}}" class="cart" src="../../assets/images/shopping_cart.png" bindtap="addcart" />  
              </view>  
            </view>  
          </view>  
        </block>  
      </view>  
    </view>

    4.样式

    group.wxss

    /* pages/group/group.wxss */
    page{  
      height: 100%;  
    }  
    .container{  
      background: #f5f5f5;  
    }  
      
    .tit{  
      display: flex;  
      flex-direction: row;  
      justify-content: space-between;  
      height: 30px;  
      position: relative;  
    }  
    .tit::before{  
      content:'';  
      background: #ffcc00;  
      5px;  
      height: 100%;  
      position: absolute;  
      left: 0;  
      top: 0;  
    }  
      
    .title_val{  
      padding: 0 15px;  
      font-size: 14px;  
      color: #555;  
      line-height: 30px;  
    }  
    .more{  
      font-size: 12px;  
      line-height: 30px;  
      color: #999;  
      padding: 0 5px 0 0 ;  
    }  
    .goodslist{  
      background: #fff;  
      display: flex;  
      flex-direction: column;  
    }  
    .goods{  
      display: flex;  
      flex-direction: row;  
      border-bottom: 1px solid #ddd;  
    }  
    .good-img{  
      padding: 5px;  
       80px;  
      height: 80px;  
    }  
    .good-cont{  
      display: flex;  
      flex: 1;  
      flex-direction: column;  
      font-size: 14px;  
    }  
    .goods-navigator{  
      display: flex;  
      flex: 1;  
      flex-direction: column;  
      justify-content: center;  
    }  
    .good-name{  
      display: flex;  
      flex: 1;  
      flex-direction: column;  
      color: #555;  
      justify-content: center;  
    }  
    .good-price{  
      display: flex;  
      flex: 1;  
      flex-direction: row;  
      justify-content: space-between;  
      color:#e4393c;  
      font-weight: 600;  
    }  
    .cart{  
       40px;  
      height: 40px;  
      padding-right: 10px;  
    }

    5.效果图

  • 相关阅读:
    powerdesigner添加mysql的字符集ENGINE和DEFAULT CHARACTER SET
    powerdesigner怎么设置同时显示name和code
    更改gradle的java的class文件输出目录的结构
    使用TortoiseGit时如何实现SSH免密码登录
    TortoiseGit之配置密钥
    Mock InjectMocks ( @Mock 和 @InjectMocks )区别
    Centos tomcat jmx 远程连接
    【C++】常见易犯错误之数值类型取值溢出与截断(3)
    【C++】常见易犯错误之数值类型取值溢出与截断(2)
    【C++】常见易犯错误之数值类型取值溢出与截断(1)
  • 原文地址:https://www.cnblogs.com/crazycode2/p/8323555.html
Copyright © 2011-2022 走看看