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 相关文章推荐
Prototype ObjectRange对象学习
Jul 19 Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
详解Vue使用 vue-cli 搭建项目
Apr 20 Javascript
angularjs封装$http为factory的方法
May 18 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
jQuery - AJAX load() 实例用法详解
Aug 27 jQuery
js实现金山打字通小游戏
Jul 24 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
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
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python多进程实现进程间通信实例
2017/11/24 Python
在Python中定义一个常量的方法
2018/11/10 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
DataList 能否分页,请问如何实现?
2015/05/03 面试题
linux面试题参考答案(3)
2012/09/13 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
客服部班长工作责任制
2014/02/25 职场文书
班风学风建设方案
2014/05/06 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android
JS实现简单九宫格抽奖
2022/06/28 Javascript
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技