vue實現(xiàn)購物車功能(商品分類)
本文實例為大家分享了vue實現(xiàn)購物車功能的具體代碼,供大家參考,具體內(nèi)容如下
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
}
},
//商品數(shù)量加
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'>結(jié)算</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>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3實現(xiàn)alert自定義的plugins方式
這篇文章主要介紹了vue3實現(xiàn)alert自定義的plugins方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
typescript+vite項目配置別名的方法實現(xiàn)
我們?yōu)榱耸÷匀唛L的路徑,經(jīng)常喜歡配置路徑別名,本文主要介紹了typescript+vite項目配置別名的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
vue3中如何使用Pinia實現(xiàn)數(shù)據(jù)持久化操作
使用vue3中的pinia,我們可以在多個頁面間共享數(shù)據(jù),但是一旦我們關(guān)閉或刷新頁面,這些數(shù)據(jù)就會丟失,因此,我們需要有一種數(shù)據(jù)持久化的解決方案,下面我們就來看看具體如何解決的吧2023-10-10
解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題)
這篇文章主要介紹了解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
vue項目在webpack2實現(xiàn)移動端字體自適配功能
這篇文章主要介紹了vue項目在webpack2實現(xiàn)移動端字體自適配的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
vue Element左側(cè)無限級菜單實現(xiàn)
這篇文章主要介紹了vue Element左側(cè)無限級菜單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
ElementUI的this.$notify.close()調(diào)用不起作用的解決
本文主要介紹了ElementUI的this.$notify.close()調(diào)用不起作用的解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08

