小程序购物车功能实现

作者: 明月半倚深秋_f45e | 来源:发表于2017-06-12 13:04 被阅读3629次
    效果图

    首先我们要拆分一下购物车的功能点
    1.商品选中功能,包括单选、全选
    2.商品数量加减功能
    3.商品的总数量计算
    4.商品的总价钱计算
    大致分为以上四点了,现在我们来一个个实现
    首先呢,我们现在js的data里放入一些数据

    //code表示编号,name商品名称,url图片地址,style类型说明,price价格,select是否选中,num购买数量
    list:[{
          code:"0001",
          name:"无人机",
          url:"http://i1.mifile.cn/a1/pms_1487824962.01314237!220x220.jpg",
          style:"低配版",
          price:"4999",
          select:"circle",
          num:"1"
        },
        {
          code: "0002",
          name: "智能手环",
          url: "http://i1.mifile.cn/a1/pms_1467962689.97551741!220x220.jpg",
          style: "2代",
          price: "149",
          select: "circle",
          num: "1"
        },{
          code: "0003",
          name: "指环支架",
          url: "http://i2.mifile.cn/a1/pms_1482221011.26064844.jpg",
          style: "金色",
          price: "19",
          select: "circle",
          num: "1"
        }]
    

    然后呢,我们wxml文件中的选中框这么写

    <icon type="{{item.select}}" size="26" data-index="{{index}}" data-select="{{item.select}}" bindtap="change"/>
    

    type为success时是选中状态,circle为未选中
    当用户点击时通过change方法传入data-index和data-select
    为了确定被点击的商品和该商品是否选中
    然后change方法

     //改变选框状态
      change:function(e){
        var that=this
        //得到下标
        var index = e.currentTarget.dataset.index
        //得到选中状态
        var select = e.currentTarget.dataset.select
        
        if(select == "circle"){
           var stype="success"
        }else{
           var stype="circle"
        }
     //把新的值给新的数组
       var newList= that.data.list
       newList[index].select=stype
        //把新的数组传给前台
        that.setData({
          list:newList
        })
    

    其实就是每次点击就更改我们的商品数组里面的信息
    全选功能也就简单了
    点击的时候遍历数组嘛,把select属性都变成success就行了

    //全选
    allSelect:function(e){
      var that=this
      //先判断现在选中没
      var allSelect = e.currentTarget.dataset.select
      var newList = that.data.list
      if(allSelect == "circle"){
        //先把数组遍历一遍,然后改掉select值
        for (var i = 0; i < newList.length; i++) {
          newList[i].select = "success"
        }
        var select="success"
      }else{
       //取消全选
        for (var i = 0; i < newList.length; i++) {
          newList[i].select = "circle"
        }
        var select = "circle"
      }
      that.setData({
        list:newList,
        allSelect:select
      })
    }
    

    好,现在接着下面一个功能,商品加减
    现在后面做法基本都一样
    点击加减,改变list里面的num就行了
    我这里默认商品最大数量为99件,当为0的时候就移除该商品
    wxml代码

    <view class="num-box">
                                <view class="btn-groups">
                                        <button class="goods-btn btn-minus" data-index="{{index}}" data-num="{{item.num}}" bindtap="subtraction">—</button>
                                          <view class="num">{{item.num}}</view>
                                          <button class="goods-btn btn-add" data-index="{{index}}" data-num="{{item.num}}" bindtap="addtion">+</button>
                                </view>
                          </view>
    

    点击时还是带两个信息,一个是data-index确定是那个商品被点击,data-num确定当前的数量

      //加法
      addtion:function(e){
        var that=this
        //得到下标
        var index = e.currentTarget.dataset.index
        //得到点击的值
        var num = e.currentTarget.dataset.num
        //默认99件最多
        if(num<100){
          num++
        }
        //把新的值给新的数组
        var newList = that.data.list
        newList[index].num =num
       
        //把新的数组传给前台
        that.setData({
          list: newList
        })
      },
      //减法
    subtraction:function(e){
      var that = this
      //得到下标
      var index = e.currentTarget.dataset.index
      //得到点击的值
      var num = e.currentTarget.dataset.num
      //把新的值给新的数组
      var newList = that.data.list
      //当1件时,点击移除
      if (num == 1) {
          newList.splice(index,1)
      }else{
        num--
        newList[index].num = num
      }
      
      //把新的数组传给前台
      that.setData({
        list: newList
      })
    }
    

    计算总数量这个不要太简单
    遍历list,把每个item的num属性加起来就OK了

    //计算数量
    countNum:function(){
      var that=this
      //遍历数组,把既选中的num加起来
      var newList = that.data.list
      var allNum=0
      for (var i = 0; i < newList.length; i++) {
            if(newList[i].select=="success"){
              allNum += parseInt(newList[i].num) 
            }
      }
      parseInt
      console.log(allNum)
      that.setData({
        num:allNum
      })
    }
    

    最后一个也简单,遍历数组把每个item的num*price加起来就OK了

    //计算金额方法
    count:function(){
      var that=this 
      //思路和上面一致
      //选中的订单,数量*价格加起来
      var newList = that.data.list
      var newCount=0
      for(var i=0;i<newList.length;i++){
        if(newList[i].select == "success"){
          newCount += newList[i].num * newList[i].price
        }
      }
      that.setData({
        count:newCount
      })
    }
    

    最后呢,我们在点击加减或者是选中的操作方法的结尾,调用上面的两个计算方法就行了
    代码在下方,如果觉得有用,欢迎打赏。。。
    链接:http://pan.baidu.com/s/1pLv2USj 密码:4bri

    相关文章

      网友评论

      • 陌紫嫣:喜欢,希望多发布一些这样的文章,帮助我们这样的小白!

      本文标题:小程序购物车功能实现

      本文链接:https://www.haomeiwen.com/subject/zfdlqxtx.html