Vant+小程序+购物车实例

Posted cinderellastory

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vant+小程序+购物车实例相关的知识,希望对你有一定的参考价值。

图片实例,看是否是您所需要的喔。。。。

技术图片

 

 

扫码小程序可看实例操作,有啥问题也可扫码加群,很希望可以帮助到你喔!

技术图片         技术图片     

 

html部分:

<view class="cart">
  <view class=‘top‘ wx:if="isTop">
    <view>
     <van-icon name="delete" class=‘delete‘ bindtap="emptyCart"/><text bindtap="emptyCart">清空购物车</text>
    </view>
  </view>
  <view>
      <view class="cartGoods" wx:for="items" wx:key="item" data-index="index">
      <view class="sigleCheck">
      <!-- wx:if 是否选择显示不同图标 -->
          <icon wx:if="item.selected" type="success" color="#6167e9" bindtap="sigleCheck" data-index="index" />
          <icon wx:else type="circle" bindtap="sigleCheck" data-index="index"/>
      </view>
      <view class="goodsImg">
        <navigator url="../details/details?id=item.id">
              <image src="item.pic" />
        </navigator>
      </view>
      <view class="goodsDetail">
        <view class=‘details‘>
        <view class=‘goodsName‘>
        <navigator url="../details/details?id=item.id">
          item.info</navigator>
        </view>
          <text class=‘goodsPrice‘>¥item.sale_price</text>
        </view>
        <view class="operate">
            <van-stepper value="item.number" data-index="index" min="1" max="10" bind:plus="plus" bind:minus="minus"/>
            <view class="del">
              <van-icon name="close" bindtap="deleteList" data-index="index"/>
            </view>
        </view>
      </view> 
    </view>
    <view class="submitBar" wx:if="bottomBar">
        <van-submit-bar
        price=" totalPrice*100 "
        button-text="买单"
        bind:submit="onClickButton"
        >
          <!-- wx:if 是否全选显示不同图标 -->
          <view class=‘allCheck‘>
            <icon wx:if="selectAllStatus" type="success_circle" color="#6167e9" bindtap="selectAll"/>
            <icon wx:else type="circle" color="#6167e9" bindtap="selectAll"/>
            <text class="allText">全选</text>
          </view>
        </van-submit-bar>
    </view>
  </view>
  <view wx:if="hasList" class=‘empty‘>
   <view>
       <image src=‘../../images/a.png‘ class=‘empty_pic‘></image>
       <view class="empty_text">购物车为空,快去添加商品吧~</view>
       <view>
       <van-button round type="danger" bindtap=‘Gohome‘ class=‘Gohome‘ size="large">去逛逛</van-button>
       </view>
   </view>
  </view>
  <van-notify id="custom-selector" />
  <van-toast id="van-toast" />
</view>

JS部分:

  1 //index.js
  2 import Notify from ‘../vant/notify/notify‘;
  3 import Toast from ‘../vant/toast/toast‘;  //引入toast
  4 var cartData = require(‘../../api/cart.js‘);
  5 
  6 //获取应用实例
  7 const app = getApp()
  8 
  9 Page(
 10   data: 
 11     isTop: true,
 12     bottomBar:true,           //默认底部导航
 13     hasList: false,          // 列表是否有数据
 14     selectAllStatus: false,    // 全选状态,默认全选
 15     totalPrice:0,    //总价
 16   ,
 17   onLoad: function () 
 18     this.setData(
 19       items: cartData.cartList
 20     );
 21   ,
 22   // 减去商品
 23   minus(event)
 24     var items = this.data.items  //获取购物车列表
 25     var index = event.currentTarget.dataset.index;//获取当前点击事件的下标索引
 26     var number = items[index].number  //获取购物车里面的value值
 27       number--
 28       items[index].number=number;
 29       console.log("number",number);
 30     this.setData(
 31       items: items
 32     );
 33     this.getTotalPrice();                               // 重新获取总价
 34   ,
 35   // 加
 36   plus(e)
 37     var items = this.data.items  //获取购物车列表
 38     var index = e.currentTarget.dataset.index;//获取当前点击事件的下标索引
 39     var number = items[index].number  //获取购物车里面的value值
 40      number++
 41      items[index].number = number;
 42     this.setData(
 43       items: items
 44     );
 45     this.getTotalPrice();                               // 重新获取总价
 46   ,
 47   // 单选
 48   sigleCheck(e)
 49     var items = this.data.items  //获取购物车列表
 50     var index = e.currentTarget.dataset.index;//获取当前点击事件的下标索引
 51     var selected = items[index].selected  //获取购物车里面的value值
 52     items[index].selected = !selected;
 53     this.setData(
 54       items:items
 55     );
 56     this.getTotalPrice();                               // 重新获取总价
 57   ,
 58   // 全选
 59   selectAll(e) 
 60     let selectAllStatus = this.data.selectAllStatus;    // 是否全选状态
 61     selectAllStatus = !selectAllStatus;
 62     let items = this.data.items;
 63 
 64     for (let i = 0; i < items.length; i++) 
 65       items[i].selected = selectAllStatus;            // 改变所有商品状态
 66     
 67     this.setData(
 68       selectAllStatus: selectAllStatus,
 69       items: items
 70     );
 71     this.getTotalPrice();                               // 重新获取总价
 72   ,
 73   // 总价
 74   getTotalPrice() 
 75     let items = this.data.items;                  // 获取购物车列表
 76     let total = 0;
 77     for (let i = 0; i < items.length; i++)          // 循环列表得到每个数据
 78       if (items[i].selected)                    // 判断选中才会计算价格
 79         total+= items[i].number * items[i].sale_price;     // 所有价格加起来
 80         total=total
 81       
 82     
 83 
 84     this.setData(                                // 最后赋值到data中渲染到页面
 85       items: items,
 86       totalPrice: total
 87     );
 88     console.log(this.data.totalPrice)
 89   ,
 90   // 删除商品
 91   deleteList(e) 
 92     const index = e.currentTarget.dataset.index;
 93     let items = this.data.items;
 94     items.splice(index, 1);              // 删除购物车列表里这个商品
 95     this.setData(
 96       items: items
 97     );
 98     if (!items.length)                   // 如果购物车为空
 99       Notify(
100         text: ‘全部删除‘,
101         duration: 1000,
102         selector: ‘#custom-selector‘,
103         backgroundColor: ‘#fc464a‘
104       );
105       this.setData(
106         hasList: true,              // 修改标识为false,显示购物车为空页面
107         bottomBar: false,          //底部导航隐藏
108         isTop: false,
109       );
110      else                               // 如果不为空
111       this.getTotalPrice();           // 重新计算总价格
112       Notify(
113         text: ‘删除一个‘,
114         duration: 1000,
115         selector: ‘#custom-selector‘,
116         backgroundColor: ‘#fc464a‘
117       );
118     
119   ,
120   // 清空购物车
121   emptyCart()
122     console.log("清空",this.data.items)
123     var items = this.data.items;
124    items = ‘‘;
125     this.setData(
126       items: items,
127       bottomBar: false,
128       hasList: true,
129       isTop: false,
130     );
131   ,
132   // 购买成功
133   onClickButton() 
134     Toast.success(‘购买成功‘);
135   ,
136   Gohome()
137     wx.switchTab(
138       url: ‘../home/home‘
139     )
140   
141 )

CSS部分:

.cart
  background: #f7f7f7;

.top
  color: #666;
  background: #fff;
  padding: 20rpx 20rpx;
  font-size: 32rpx;
  display: flex;
  justify-content: space-between;

.top .wap-nav
  vertical-align: middle;
  padding-right:16rpx;

.delete
  padding-right:16rpx;
  margin-left: 20rpx; 

.compute,.cartGoods
  display: flex;
  align-items: center;

.cartGoods
  justify-content: space-between;

.cartGoods
  background: #fff;
  margin-top: 20rpx;
  padding: 10px 0;

.goodsImg image
  width: 160rpx;
  height: 160rpx


.goodsDetail
  margin:0 30rpx;

.goodsName
  color: #666;
 font-size: 28rpx;
  width: 80%;

.details
  height: 46rpx;
  overflow: hidden;
  display: flex;

.goodsPrice
 font-size: 30rpx;
  color: red;
  font-weight: bold;
  display: inline-block;
  width: 200rpx;

.operate
  display: flex;
  margin-top:30rpx;
  justify-content: space-around;


.sigleCheck
  margin: 0 20rpx;

.allCheck
  margin-left: 20rpx;

.allCheck icon
  vertical-align: middle;
  padding-right:10rpx;

.empty
  background: #fff;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  color: #666;
  font-size: 32rpx;

.empty_text
  padding: 10rpx 0 30rpx 0;
  text-align: center;

.empty_pic
 width:400rpx;
height:250rpx;

.Gohome .van-button--large
  height: 80rpx;
  background: #6167e9;
  border: 1px solid #6167e9;
  line-height: 74rpx;
  font-size: 36rpx;

.submitBar .van-button--danger
  border: 1px solid #6167e9;
  background: #6167e9;

 

以上是关于Vant+小程序+购物车实例的主要内容,如果未能解决你的问题,请参考以下文章

vant 小程序踩坑之Toast

vant组件库 vue及小程序

小程序安装第三方组件库 如:vant

微信小程序 vant日历自定义文案

小程序引入vant-Weapp

vue+vant-stepper+js实现购物车原理小demo