vue实现购物车功能(商品分类)


Posted in Javascript onApril 20, 2020

本文实例为大家分享了vue实现购物车功能的具体代码,供大家参考,具体内容如下

new Vue({
 el: "#app",
 data: {
 cIndex: 0,
 lists: [
  {
  title: "推荐商品",
  goods: [
   {
   id: 0,
   img: './images/goods.png',
   name: '散称樱桃1',
   price: '10.00',
   num: 0
   },
   {
   id: 1,
   img: './images/goods.png',
   name: '散称樱桃1',
   price: '10.00',
   num: 0
   }
 
  ]
  },
  {
  title: "推荐商品",
  goods: [
   {
   id: 2,
   img: './images/goods.png',
   name: '散称樱桃2',
   price: '20.00',
   num: 0
   },
   {
   id: 3,
   img: './images/goods.png',
   name: '散称樱桃2',
   price: '20.00',
   num: 0
   },
  ]
  },
 ],
 carArr: [],
 appearCar: false,
 },
 computed:{
 alltotal:function () {
  var alltotal = 0;
  var allNum = 0;
  for(var i = 0,len = this.lists.length;i<len;i++){
  for(var j = 0,goodsLen = this.lists[i].goods.length;j<goodsLen;j++){
   alltotal += parseInt(this.lists[i].goods[j].num)*parseFloat(this.lists[i].goods[j].price);
   allNum += parseInt(this.lists[i].goods[j].num);
  }
  }
  return [alltotal,allNum]
 },
 },
 methods: {
 leftTap: function (index) {
  this.cIndex = index
 },
 showCar: function () {
  if (this.carArr.length == 0) {
  this.appearCar = false
  } else {
  this.appearCar = !this.appearCar
  }
 
 },
 //商品数量加
 addNum: function (data) {
  data.num++;
  var carArr = this.carArr;
  var isCar = false;
  if (carArr == 0) {
  carArr.push(data)
  }
  for (var i = 0, len = carArr.length; i < len; i++) {
  if (data.id == carArr[i].id) {
   isCar = true
  }
  }
  if (!isCar) {
  carArr.push(data)
  }
 },
 reduceNum: function (data) {
  if (data.num <= 0) return;
  var carArr = this.carArr;
  data.num--;
  var isCar = false;
  for (var i = 0, len = carArr.length; i < len; i++) {
  if (carArr[i].num <= 0) {
   carArr.splice(i, 1)
  }
  }
 },
 carAddNum: function (index) {
  this.carArr[index].num++
 },
 carReduceNum: function (index) {
  this.carArr[index].num--;
  if (this.carArr[index].num <= 0) {
  this.carArr.splice(index, 1)
  }
  if (this.carArr.length == 0) {
  this.appearCar = !this.appearCar
  }
 },
 // 清空
 delCar: function () {
  confirm('确定清空购物车吗?');
  var cur = this.cIndex;
  var goods = this.lists[cur].goods
  if (true) {
  this.carArr = [];
  this.appearCar = !this.appearCar;
  for(var i = 0,len = this.lists.length;i<len;i++){
   for(var j = 0,goodsLen = this.lists[i].goods.length;j<goodsLen;j++){
   this.lists[i].goods[j].num=0;
   }
  }
  }
 },
 Settlement:function () {
  if(this.alltotal[0]<=0){
  console.log('我不动')
  }else{
  window.location.href = 'cashierPay.html'
  }
 }
 }
})

html页面

<div id="app" v-cloak>
 <div class='box'>
 <div class='boxleft'>
  <div class='boxla'>
  <img src='./images/sm.png'/>
  <span>扫码</span>
  </div>
  <ul class='boxlbox'>
  <template v-for="(item,index) in lists">
   <li @click='leftTap(index)' :class="{boxlb_cheak:cIndex==index}" class='boxlb'>
   <span class='boxlb_inner' :class="{boxlb_inner_cheak:cIndex==index}">{{item.title}}</span>
   </li>
  </template>
  </ul>
 </div>
 <ul class='boxright'>
  <li class='boxri' v-for="(item,index) in lists[cIndex].goods">
  <img class='boxri_img' :src='item.img'/>
  <div class='boxri_text'>
   <div class='boxrit_left'>
   <p class='boxritl_name'>{{item.name}}</p>
   <p class='boxritl_price'>¥{{item.price}}</p>
   </div>
   <div class='boxrit_right'>
   <img @click='reduceNum(item)' v-show="item.num>0" class='boxrit_right_img' src='./images/minus.png'/>
   <span class='boxrit_right_num' v-show="item.num>0">{{item.num}}</span>
   <img @click='addNum(item)' class='boxrit_right_img' src='./images/add.png'/>
   </div>
  </div>
  </li>
 </ul>
 </div>
 <footer class='footer'>
 <div class='cartImgBox'>
  <img class='cartImg' src='./images/car.png' @click='showCar'/>
  共{{alltotal[1]}}件商品
 </div>
 <div class='footerb'>¥{{alltotal[0]}}</div>
 <div @click='Settlement' class='footerc'>结算</div>
 </footer>
 <!-- 购物车 -->
 
 <div class='shop-car-mask' v-show="appearCar">
 <div class='shop-com'>
  <div class='shop-title'>
  <span>已选商品</span>
  <span @click="delCar">清空</span>
  </div>
  <ul class="car-shopList">
  <template v-for='(item,index) in carArr'>
   <li class='car-list'>
   <div class='car-img'>
    <img :src='item.img'/>
   </div>
   <div class='car-name'>{{item.name}}</div>
   <div class='car-num'>¥{{item.price}}</div>
   <div class='boxrit_right2'>
    <img @click='carReduceNum(index)' class='boxrit_right_img2' src='./images/minus.png'/>
    <span class='boxrit_right_num2'>{{item.num}}</span>
    <img @click='carAddNum(index)' class='boxrit_right_img2' src='./images/add.png'/>
   </div>
   </li>
  </template>
  </ul>
 </div>
 </div>
</div>

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

Javascript 相关文章推荐
javascript firefox兼容ie的dom方法脚本
May 18 Javascript
Firefox window.close()的使用注意事项
Apr 11 Javascript
JS继承--原型链继承和类式继承
Apr 08 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
Nov 17 Javascript
js运动动画的八个知识点
Mar 12 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
基于javascript bootstrap实现生日日期联动选择
Apr 07 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
jQuery解析XML 详解及方法总结
Sep 28 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
微信小程序实现搜索历史功能
Mar 26 Javascript
javascript中Set、Map、WeakSet、WeakMap区别
Dec 24 Javascript
vue实现淘宝购物车功能
Apr 20 #Javascript
javascript利用键盘控制小方块的移动
Apr 20 #Javascript
vue实现购物车的监听
Apr 20 #Javascript
详解微信小程序工程化探索之webpack实战
Apr 20 #Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 #Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 #Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 #Javascript
You might like
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
swfupload 多文件上传实现代码
2008/08/27 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
利用php生成验证码
2017/02/23 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
Python中字符串的处理技巧分享
2016/09/17 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
Python学习小技巧总结
2018/06/10 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
幼儿园美术教学反思
2014/01/31 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
升学宴答谢词
2015/01/05 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP