微信小程序实现购物车小功能


Posted in Javascript onDecember 30, 2020

微信小程序购物车效果,供大家参考,具体内容如下

微信小程序实现购物车小功能

购物车是一个比较简单的小功能。

购物车功能主要运用了微信小程序的缓存机制,在商品页面将需要添加的数据同步传入缓存中,然后在购物页面通过同步方法拿到对应的数据,最后在页面上进行渲染就可以了。

关键方法

var arrlist = wx.getStorageSync(‘key') //获取缓存对应key得数据
wx.setStorageSync(‘key',arrlist) //修改缓存对应key得数据

以下便是购物车页面的详细代码,以供交流参考:
切记要根据自身实际,不要按部就班

wxml部分

<scroll-view class="neirong" scroll-y="true" scroll-with-animation="true">
<block wx:for="{{goodsCartList}}" wx:key="this">
 <view class="carts"> 
  <view class="cartsxq">
   <view class="cartsxq_left">
    <image src="{{item.detail.images}}"></image>
   </view>
   <view class="cartsxq_right">
    <view class="pdtnamestyle">{{item.detail.pdtname}}</view>
    <view class="pricestyle">¥{{item.detail.price}}</view>
    <view class="xiaojistyle">金额:{{item.detail.price*item.count}}</view>
    <view class="gongnengdw">
     <view class="jian" bindtap="oper" data-type="-" data-index="{{index}}" >
      <image src="/images/jian.png"></image>
     </view>
     <view class="suliang">{{item.count}}</view>
     <view class="jia" bindtap="oper" data-type="+" data-index="{{index}}" >
      <image src="/images/jia.png"></image>
     </view>
    </view>
   </view>
  </view>
 </view>
</block>
</scroll-view>


<view class="allTotal">
 <view class="allTotal_clear" bindtap="toclears">清空</view>
 <view class="allTotal_left">总计:{{allTotal}}</view>
 <view class="allTotal_right">结算</view>
</view>

wxss部分

/* pages/carts/carts.wxss */
.carts{
 width: 680rpx;
 height: auto;
 margin: 15rpx auto;
 border-bottom: 1rpx solid #e3e3e3;
}
.cartsxq{
 width: 100%;
 height: 200rpx;
 display: flex;
}
.cartsxq image{
 width: 200rpx;
 height: 150rpx;
 margin: 30rpx;
 border-radius: 10rpx;
}
.cartsxq_left{
 flex: 4;
}

.cartsxq_right{
 flex: 7;
 position: relative;
}

.gongnengdw{
 display: flex;
 width: 200rpx;
 height: 50rpx;
 position: absolute;
 right: 0;
 bottom: 10rpx;
 align-items: center;
 overflow: hidden;
}
.gongnengdw image{
 width: 40rpx;
 height: 40rpx;
}

.jian{
 flex: 1;
 text-align: center;
}
.jia{
 flex: 1;
 text-align: center;

}
.suliang{
 flex: 1;
 text-align: center;
}

.pdtnamestyle{
 margin: 10rpx;
 font-size: 28rpx;
 padding-top: 28rpx;
}
.pricestyle{
 font-size: 34rpx;
 color: tomato;
 margin: 10rpx;
}
.xiaojistyle{
 font-size: 21rpx;
 color: tomato;
 margin: 10rpx;
}

.allTotal{
 display: flex;
 width: 100%;
 height: 80rpx;
 border-top: 1rpx solid rgba(0, 0, 0, 0.1);
 position: fixed;
 bottom: 0;
 align-items: center;
}
.allTotal_clear{
 flex: 3;
 text-align: center;
 border-right: 1rpx solid rgba(0, 0, 0, 0.2);
}
.allTotal_left{
 flex: 3;
 text-align: center;
 border-right: 1rpx solid rgba(0, 0, 0, 0.2);
}
.allTotal_right{
 flex: 3;
 text-align: center;
}

.neirong{
 height: calc(100vh - 90rpx);
}

js部分

// 引用并封装成对象
var showData = require("../../utils/data.js")

Page({
  
 data: {
  goodsCartList:[],
  //总计
  allTotal:0
 },
  
 //清空方法
 toclears:function(e){
  var that =this;
  let cartList =wx.getStorageSync("cartList")||[];
  if(cartList != []){
   wx.showModal({
    title:"提示",
    content:"您是否要清空购物车",
    cancelColor: 'cancelColor',
    success:function(res){
     if(res.confirm){
      cartList.splice(cartList);
      wx.setStorageSync("cartList", cartList);
      that.getNewPage();
     }
    }
   })
  }else if(cartList == []){
   wx.showModal({
    title:"提示",
    content:"购物车没东西了",
   })
  }
 },

 //处理加减操作
 oper:function(e){
  //获取当前对象的type,后赋值给types
  var types = e.currentTarget.dataset.type;

  //获取当前对象的index的值,后赋值给index
  var index = e.currentTarget.dataset.index;
  
  ///获取当前数据索引对应的"count"(数量),后赋值给count
  var count = this.data.goodsCartList[index].count;

  var isDelet =false;

  //将一段语句赋值给temp
  var temp = "goodsCartList["+index+"].count";

  //判断当前对象的type值是否与“+”相等,减号以此类推
  if(types == '+'){
   this.setData({
    [temp]:++count
   })
  }else if(types == '-'){
   if(count>1){
    this.setData({
     [temp]:--count
    })
   }else{
    isDelet = true;
   }
  }

  //如果同步缓存中的key有cartList 就返回cartList ,若没有则返回空 
  //然后把同步存储缓存的key赋值给cartList
  var cartList =wx.getStorageSync("cartList")||[];
  var that =this;
  if(isDelet){
   //页面交互
   wx.showModal({
    title:"提示",
    content:"您是否要将该商品移出购物车",
    cancelColor: 'cancelColor',
    success:function(res){
     if(res.confirm){
      var newCartel = []
      for(let i=0; i<cartList.length;i++){
       if(i!= index){
        newCartel.push(cartList[i]);
       }
      }
      wx.setStorageSync('cartList', newCartel);
      that.getNewPage();
     }
    }
   })
  }else{
   cartList[index].count = count;
   wx.setStorageSync('cartList', cartList);
  }

  //让cartList[index].count的值与上面创建的count相等
  cartList[index].count = count;

  //默认allTotal为0,因为在onShow方法中已经调用了allTotal,所以在这里我们需要在局部作用域下新创建一个allTotal变量
  var allTotal = 0;

  //把this.data.goodsCartList数据赋值给goodsCartList
  var goodsCartList = this.data.goodsCartList;

  for(let i=0; i<goodsCartList.length;i++){
   allTotal += goodsCartList[i].detail.price * goodsCartList[i].count;
   console.log(allTotal);
  }
  this.setData({
   allTotal:allTotal
  })

 },
 

 //封装总计方法
 getNewPage:function(){
  var cartIndexList = wx.getStorageSync("cartList");
  var cartList = showData.getGoodsListByIndex(cartIndexList);
  var goodsCartList =[];
  var allTotal=0;
  for(let i=0; i<cartList.length; i++){
   goodsCartList.push({
    detail:cartList[i],
    count:cartIndexList[i].count
   })
   allTotal = allTotal + cartList[i].price * cartIndexList[i].count;
  }

  this.setData({
   goodsCartList:goodsCartList,
   allTotal:allTotal
  })
 },
  
 //页面同步显示
 onShow: function () {
  this.getNewPage();
 },

})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
jquery $.each()使用探讨
Sep 23 Javascript
javascript常用功能汇总
Jul 05 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
解决Extjs下拉框不显示的问题
Jun 21 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
Aug 20 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
js实现全选反选不选功能代码详解
Apr 24 Javascript
Vue实现简易购物车页面
Dec 30 #Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 #Vue.js
vue+element UI实现树形表格
Dec 29 #Vue.js
vue实现树状表格效果
Dec 29 #Vue.js
vue实现图书管理系统
Dec 29 #Vue.js
微信小程序实现下拉加载更多商品
Dec 29 #Javascript
微信小程序实现登录注册功能
Dec 29 #Javascript
You might like
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python3 深浅copy对比详解
2019/08/12 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
python中os包的用法
2020/06/01 Python
python 实现端口扫描工具
2020/12/18 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
品质标语大全
2014/06/21 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python