微信小程序实现购物车

购物车图片
在这里插入图片描述

复制粘贴直接用

shopcart.wxml

<!--pages/shopcart/shopcart.wxml-->
<scroll-view class="scroll" scroll-y="true">
  <view class="separate"></view>
  <view wx:for="{{carts}}" wx:key="id">
    <view class="cart_container">
      <view class='select_icon'>
        <icon  wx:if="{{item.ischecked}}" type="success" color="red" bindtap="judge_checked" data-index="{{index}}" />
        <icon wx:else type="circle" bindtap="judge_checked" data-index="{{index}}"/>
       </view>

      <image class="item-image" src="{{item.image}}"></image>

      <view class="column">
        <view class="bjj">
        <text class="title">{{item.title}}</text>
        <view  class='ljt'>
          <image class='ljt1' src='/images/ljt.png' bindtap='deleteList' data-index="{{index}}"></image> 
        </view>
        </view>
        
  
        <view class="row1">
          <text class="sku-price">¥</text>
          <text class="sku-price1">{{item.price}}</text>
        </view> 
          <view class='sku'>
             <view class='mm'  bindtap="minusCount" data-index="{{index}}">-</view>
               <view class='mm'>{{item.num}}</view>
             <view class='mm' bindtap="addCount" data-index="{{index}}">+</view>
          </view>
      </view>
    </view>
    <view class="separate"></view>
  </view>



</scroll-view>
<view class="bottom_total">
  <view class="bottom_line"></view>

  <view class="row">
    <view class='iconAll'>
    <icon  wx:if="{{selectAllStatus}}" type="success" color="red" bindtap="selectAll" data-index="{{index}}" />
        <icon wx:else type="circle" bindtap="selectAll" data-index="{{index}}"/>
    </view>
    <text class="small_text">全选</text>
    <text>合计:¥ </text>
    <text class="price">{{totalPrice}}</text>
    <button class="button-red" bindtap="toBuy" formType="submit">去结算</button>
  </view>
</view>

shopcart.wxss

/* pages/shopcart/shopcart.wxss */

.cart_container {
  display: flex;
  flex-direction: row;
}
.scroll {
  margin-bottom: 120rpx;
}
.column {
  display: flex;
  flex-direction: column;
}
.row {
  display: flex;
  flex-direction: row;
  align-items: center;
}
.row1{
  display: flex;
  flex-direction: row;
  align-items: center;
}
.sku {
  margin-top: -70rpx;
  margin-left: 198rpx;
}
.sku-price {
  color: red;
  position: relative;
  margin-top: 70rpx;
}
.sku-price1 {
  color: red;
  position: relative;
  margin-top: 70rpx;
  width: 140rpx;
  overflow: hidden;
  white-space: nowrap;
}
.price {
  color: red;
  position: relative;
}
.title {
  font-size: 38rpx;
  margin-top: 40rpx;
  width:350rpx;
  display: block;
  line-height: 40rpx;
  overflow: hidden;
  white-space: nowrap;
  text-overflow:ellipsis;

}
.small_text {
  font-size: 28rpx;
  margin-right: 40rpx;
  margin-left: 10rpx;
}

.item-allselect {
  width: 40rpx;
  height: 40rpx;
  margin-left: 20rpx;
}

.bottom_line {
  width: 100%;
  height: 2rpx;
  background: lightgray;
}
.bottom_total {
  position: fixed;
  display: flex;
  flex-direction: column;
  bottom: 0;
  width: 100%;
  height: 120rpx;
  line-height: 120rpx;
  background: white;
}
.button-red {
  background-color: #f44336; /* 红色 */
}
button {
  position: fixed;
  right: 0;
  color: white;
  text-align: center;
  display: inline-block;
  font-size: 30rpx;
  border-radius: 0rpx;
  width: 30%;
  height: 120rpx;
  line-height: 120rpx;
}
.iconAll{
margin-top: 15px;
}
.select_icon{
  margin-top:60rpx;
}
.item-image {
  width: 180rpx;
  height: 180rpx;
  margin: 20rpx ;
}
.mm{
  display:inline-block;
  line-height:20px;
  padding:5px 0;
  text-align:center;
  min-width:40px;
  box-sizing:border-box;
  vertical-align:middle;
  font-size:12px;
  border:1rpx solid #dddee1;
}
.ljt{
  height: 30px;
  width: 25px;
  margin-top: 50rpx;
  margin-left: 55rpx;
}
.ljt1{
  height: 29px;
  width: 24px;
}
.bjj{
  display: flex;
  flex-direction: row;
}

shopcart.js

// pages/shopcart/shopcart.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
     carts: [],               // 购物车列表
     hasList: false,          // 列表是否有数据
     totalPrice: 0,           // 总价,初始为0
     selectAllStatus: false,    // 全选状态
  },
/**
 * 计算价格
 */
  getTotalPrice() {
    let carts = this.data.carts;                  // 获取购物车列表
    let total = 0;  //最终价格
    for (let i = 0; i < carts.length; i++) {       // 循环列表得到每个数据
      if (carts[i].ischecked == true) {            // 判断选中才会计算价格
        total += carts[i].price * carts[i].num;     // 所有价格加起来
      }
    }
    this.setData({                    // 最后赋值到data中渲染到页面
      carts: carts,
      totalPrice: total.toFixed(2)
    });
  },


/**
 * 选择事件
 */
  judge_checked(e) {
    let aAllprice = 0;
    let selectAllStatus = this.data.selectAllStatus;
    const index = e.currentTarget.dataset.index;    // 获取data- 传进来的index
    let carts = this.data.carts;
    const ischecked = carts[index].ischecked;   //获取当前商品的选中状态
    carts[index].ischecked = !ischecked;    // 改变状态
    //得知是否全选
    for (let i = 0; i < carts.length; i++) {
      aAllprice = aAllprice + this.data.carts[i].price * this.data.carts[i].num;
    }

    this.getTotalPrice()  //重新计算总价
    let allmoney = this.data.totalPrice
    if (aAllprice != allmoney) {
      selectAllStatus = false
    } else {
      selectAllStatus = true
    }
    this.setData({
      carts: carts,
      selectAllStatus: selectAllStatus
    }); 
    

  },

  /**
   *数量加减功能 
   */
  // 增加数量
  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;
    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();
  },
  //全选事件
  selectAll(e) {
    let selectAllStatus = this.data.selectAllStatus;    // 是否全选状态
   
    selectAllStatus = !selectAllStatus;
    let carts = this.data.carts;
    if (!this.data.selectAllStatus){
      for (let i = 0; i < carts.length; i++) {
        carts[i].ischecked = true
      }
    }else{
      for (let i = 0; i < carts.length; i++) {
        carts[i].ischecked = false
      }
    }
    this.setData({
      selectAllStatus: selectAllStatus,

      carts: carts
    });
    this.getTotalPrice();                               // 重新获取总价
  },
  //删除商品
  deleteList(e){
    const index = e.currentTarget.dataset.index;    // 获取data- 传进来的index
    let carts = this.data.carts;
          carts.splice(index, 1);     // 删除购物车列表里这个商品
          this.setData({
            carts: carts
          });
          if (!carts.length) {                  // 如果购物车为空
            this.setData({
              hasList: false              // 修改标识为false,显示购物车为空页面
            });
          } else {
            this.getTotalPrice();  //重新计算价格
          }
     
    wx.showToast({
      title: '已删除',
      icon: 'success',
    });
    
  },

  //去结算
  toBuy() {
    wx.showToast({
      title: '去结算',
      icon: 'success',
      duration: 3000
    });
    this.setData({
      showDialog: !this.data.showDialog
    });
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.setData({
      hasList: true,        // 既然有数据了,那设为true吧
      carts: [
        { id: 1, title: '羊肉 半斤', image: "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=782046930,1105099424&fm=27&gp=0.jpg", price: 66, ischecked: false, num: 1},
        { id: 2, title: '大饼', image: "https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=11f83d125a3d26972e86005b65cb9ec3/72f082025aafa40ffaefce05a064034f78f01938.jpg", price: 10, ischecked: false,num: 1},
        { id: 3, title: '一呀么咿呀么咿呀蚂蚁', image: "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=782046930,1105099424&fm=27&gp=0.jpg", price: 55, ischecked: false, num: 1 },
      ]
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },


  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

各个功能注释上都有
有个单独的功能 拿出来单独提一下
那个购物车加减按钮
购物车加减按钮

<view class='mm'  bindtap="minusCount" data-index="{{index}}">-</view>
          <view class='mm'>{{item.num}}</view>
<view class='mm' bindtap="addCount" data-index="{{index}}">+</view>

css样式如下

display:inline-block;
  line-height:20px;
  padding:5px 0;
  text-align:center;
  min-width:40px;
  box-sizing:border-box;
  vertical-align:middle;
  font-size:12px;
  border:1rpx solid #dddee1;

删除按钮图片位置
在这里插入图片描述
图片自己复制改名为 ljt.png 便可以直接复制粘贴代码用
垃圾桶

发布了55 篇原创文章 · 获赞 32 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_41542894/article/details/86680876