微信小程序> 小程序之购物车逻辑

小程序之购物车逻辑

浏览量:1646 时间: 来源:影夜随风

工作之余,写个小程序购物车

Cart.wxml

view class="main"    view wx:if="{{hasList}}" !--hasList判断是否存在购物列表--        view class="cart-box"            view class="cart-list" wx:for="{{carts}}" wx:key="{{index}}"                icon wx:if="{{item.selected}}" type="success" color="red" data-index="{{index}}"  class="cart-pro-select" bindtap="selectList"/                icon wx:else type="circle" class="cart-pro-select" data-index="{{index}}" bindtap="selectList"/!--item.selected判断是否选中--!--../details/details?id={{item.id}}  跳转具体商品页--                navigator url="../details/details?id={{item.id}}"image class="cart-thumb" src="{{item.image}}"/image/navigator                text class="cart-pro-name"{{item.title}}/text                text class="cart-pro-price"¥{{item.price}}/text                view class="cart-count-box"!--data-obj 自定义属性--                    text class="cart-count-down" bindtap="minusCount" data-obj="{{obj}}" data-index="{{index}}"-/text                    text class="cart-count-num"{{item.num}}/text                    text class="cart-count-add" bindtap="addCount" data-index="{{index}}"+/text                /view                text class="cart-del" bindtap="deleteList" data-index="{{index}}"×/text            /view        /view        view class="cart-footer"!--全选功能--            icon wx:if="{{selectAllStatus}}" type="success_circle" color="#fff" class="total-select" bindtap="selectAll"/            icon wx:else type="circle" color="#fff" class="total-select" bindtap="selectAll"/!--全选功能--!--调转支付页面--            view class="order-icon"                navigator url="../orders/orders"image src="/image/icon3.png"/image/navigator            /view!--调转支付页面--            text全选/text            text class="cart-toatl-price"¥{{totalPrice}}/text        /view    /view    view wx:else        view class="cart-no-data"购物车是空的哦~/view    /view/view

Cart.wxss

.cart-box{    padding-bottom: 100rpx;}.cart-list{    position: relative;    padding: 20rpx 20rpx 20rpx 285rpx;    height: 185rpx;    border-bottom: 1rpx solid #e9e9e9;}.cart-list .cart-pro-select{    position: absolute;    left: 20rpx;    top: 90rpx;    width: 45rpx;    height: 45rpx;}.cart-list .cart-thumb{    position: absolute;    top: 20rpx;    left: 85rpx;    width: 185rpx;    height: 185rpx;}.cart-list .cart-pro-name{    display: inline-block;    width: 300rpx;    height: 105rpx;    line-height: 50rpx;    overflow: hidden;}.cart-list .cart-pro-price{    display: inline-block;    float: right;    height: 105rpx;    line-height: 50rpx;}.cart-list .cart-count-box{    position: absolute;    left: 285;    bottom: 20rpx;    width: 250rpx;    height: 80rpx;}.cart-list .cart-count-box text{    display: inline-block;    line-height: 80rpx;    text-align: center;}.cart-count-down,.cart-count-add{    font-size: 44rpx;    width: 50rpx;    height: 100%;}.cart-count-num{    width: 150rpx;}.cart-del{    position: absolute;    right: 20rpx;    bottom: 20rpx;    width: 80rpx;    height: 80rpx;    line-height: 80rpx;    text-align: center;    font-size: 44rpx;}.cart-footer{    position: fixed;    bottom: 0;    left: 0;    width: 100%;    height: 90rpx;    line-height: 90rpx;    padding:0 100rpx 0 80rpx;    box-sizing: border-box;    background: #AB956D;    color: #fff;}.total-select{    position: absolute;    left: 20rpx;    top: 25rpx;    width: 45rpx;    height: 45rpx;}.order-icon{    position: absolute;    right: 40rpx;    top: 25rpx;    width: 45rpx;    height: 45rpx;}.order-icon image,.order-icon navigator{  display: block;  width: 45rpx;  height: 45rpx;}.cart-toatl-price{    float: right;    width: 120rpx;}.cart-no-data{    padding:40rpx 0;    color: #999;    text-align: center;}

Cart.js

Page({  data: {    carts:[],               // 购物车列表    hasList:false,          // 列表是否有数据    totalPrice:0,           // 总价,初始为0    selectAllStatus:true,    // 全选状态,默认全选    obj:{        name:"hello"    }  },  onShow() {    this.setData({      hasList: true,      carts:[        {id:1,title:'新鲜芹菜 半斤',image:'/image/s5.png',num:4,price:0.01,selected:true},        {id:2,title:'素米 500g',image:'/image/s6.png',num:1,price:0.03,selected:true}      ]    });    this.getTotalPrice();  },  /**   * 当前商品选中事件   */  selectList(e) {    console.log(e)    const index = e.currentTarget.dataset.index;    let carts = this.data.carts;    const selected = carts[index].selected;    carts[index].selected = !selected;    this.setData({      carts: carts    });    this.getTotalPrice();  },  /**   * 删除购物车当前商品   */  deleteList(e) {    const index = e.currentTarget.dataset.index;    let carts = this.data.carts;    carts.splice(index,1);    this.setData({      carts: carts    });    if(!carts.length){      this.setData({        hasList: false      });    }else{      this.getTotalPrice();    }  },  /**   * 购物车全选事件   */  selectAll(e) {    let selectAllStatus = this.data.selectAllStatus;    selectAllStatus = !selectAllStatus;    let carts = this.data.carts;    for (let i = 0; i  carts.length; i++) {      carts[i].selected = selectAllStatus;    }    this.setData({      selectAllStatus: selectAllStatus,      carts: carts    });    this.getTotalPrice();  },  /**   * 绑定加数量事件   */  addCount(e) {    const index = e.currentTarget.dataset.index;    let carts = this.data.carts;    let num = carts[index].num;    num = num + 1;    carts[index].num = num;    this.setData({      carts: carts    });    this.getTotalPrice();  },  /**   * 绑定减数量事件   */  minusCount(e) {    const index = e.currentTarget.dataset.index;    const obj = e.currentTarget.dataset.obj;    let carts = this.data.carts;    let num = carts[index].num;    if(num = 1){      return false;    }    num = num - 1;    carts[index].num = num;    this.setData({      carts: carts    });    this.getTotalPrice();  },  /**   * 计算总价   */  getTotalPrice() {    let carts = this.data.carts;                  // 获取购物车列表    let total = 0;    for(let i = 0; icarts.length; i++) {         // 循环列表得到每个数据      if(carts[i].selected) {                     // 判断选中才会计算价格        total += carts[i].num * carts[i].price;   // 所有价格加起来      }    }    this.setData({                                // 最后赋值到data中渲染到页面      carts: carts,      totalPrice: total.toFixed(2)    });  }})

效果图如上。有需要的朋友直接复制代码,直接可以运行(图片之类的记得更换

 

欢迎大家一起交流~~~~

小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎