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


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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
Feb 23 Javascript
Javascript this 关键字 详解
Oct 22 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
JS中mouseover和mouseout多次触发问题如何解决
Jun 06 Javascript
Angularjs 实现一个幻灯片示例代码
Sep 08 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 Javascript
electron实现静默打印的示例代码
Aug 12 Javascript
JavaScript实现简单的弹窗效果
May 19 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python中str.format()详解
2017/03/12 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Numpy之random函数使用学习
2019/01/29 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
通过实例解析python描述符原理作用
2020/01/22 Python
python删除某个目录文件夹的方法
2020/05/26 Python
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
师德个人剖析材料
2014/02/02 职场文书
群众路线党课主持词
2014/04/01 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
个人年度总结报告
2015/03/09 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
普通员工辞职信范文
2015/05/12 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
python函数的两种嵌套方法使用
2022/04/02 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS