在vue实战练习中 ; 跟到购物车点击弹出已购买的商品数据蒙层时 ; 操作蒙层内的+- ; 蒙层也跟着消失了
求解
<template>
<div class="shopcart">
<div class="content" @click="toggleList">
<!-- 内容左 -->
<div class="content-left">
</div>
<!-- 内容右 -->
<div class="content-right">
</div>
<!-- 小球的容器 -->
<div class="ball-container">
</div>
<!-- 点击购物车弹出浮层 -->
<transition name="fold">
<div class="shopcart-list" v-show="listShow">
<div class="list-header">
<h1 class="title">购物车</h1>
<span class="empty">清空</span>
</div>
<div class="list-content" ref="listContent">
<ul>
<li class="food" v-for="food in selectFoods">
<span class="name">{{food.name}}</span>
<div class="price">
<span>¥{{food.price*food.count}}</span>
</div>
<div class="cartcontrol-wrapper">
<cartcontrol :food="food"></cartcontrol>
</div>
</li>
</ul>
</div>
</div>
</transition>
</div>
</div>
</template>
<script type="text/ecmascript-6">
import BScroll from 'better-scroll';
import cartcontrol from '../cartcontrol/cartcontrol';
export default {
props: {
selectFoods: {
type: Array,
default() {
return [];
}
},
deliveryPrice: {
type: Number,
default: 0
},
minPrice: {
type: Number,
default: 0
}
},
data() {
return {
balls: [
{ show: false },
{ show: false },
{ show: false },
{ show: false },
{ show: false }
],
dropBalls: [],
fold: true
};
},
computed: {
// 数量计算
totalCount() {
let count = 0;
this.selectFoods.forEach((food) => {
count += food.count;
});
return count;
},
// 计算购物车点击弹层显示属性
listShow() {
if (!this.totalCount) {
this.fold = true;
return false;
}
let show = !this.fold;
if (show) {
this.$nextTick(() => {
if (!this.scroll) {
this.scroll = new BScroll(this.$refs.listContent, {
click: true
});
} else {
this.scroll.refresh();
}
});
}
return show;
}
},
methods: {
// 控制购物车弹层是否显示
toggleList() {
if (!this.totalCount) {
return;
}
this.fold = !this.fold;
},
},
components: {
cartcontrol
}
};
</script>
<style lang="stylus" rel="stylesheet/stylus">
@import '../../common/stylus/mixin';
.shopcart {
position: fixed;
left: 0;
bottom: 0;
z-index: 50;
width: 100%;
height: 48px;
.content {
display: flex;
background: #141d27;
color: rgba(255, 255, 255, 0.4);
.content-left {
flex: 1;
font-size: 0;
.logo-wrapper {
display: inline-block;
position: relative;
top: -10px;
margin: 0 12px;
padding: 6px;
width: 56px;
height: 56px;
box-sizing: border-box;
vertical-align: top;
border-radius: 50%;
background: #141d27;
.logo {
width: 100%;
height: 100%;
border-radius: 50%;
background: #2b343c;
text-align: center;
&.highlight {
background: rgb(0, 160, 220);
}
.icon-shopping_cart {
line-height: 44px;
font-size: 24px;
color: #80858a;
&.highlight {
color: #fff;
}
}
}
.num {
position: absolute;
top: 0;
right: 0;
width: 24px;
height: 16px;
line-height: 16px;
text-align: center;
border-radius: 16px;
font-size: 9px;
font-weight: 700;
color: #fff;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4);
background: rgb(249, 20, 20);
}
}
.price {
display: inline-block;
vertical-align: top;
line-height: 24px;
margin-top: 12px;
padding-right: 12px;
border-right: 1px solid rgba(255, 255, 255, 0.1);
box-sizing: border-box;
font-size: 16px;
font-weight: 700;
&.highlight {
color: #fff;
}
}
.desc {
display: inline-block;
margin: 12px 0 0 12px;
vertical-align: top;
line-height: 24px;
font-size: 10px;
}
}
.content-right {
flex: 0 0 105px;
width: 105px;
.pay {
height: 48px;
line-height: 48px;
text-align: center;
font-size: 12px;
font-weight: 700;
background: #2b333b;
&.not-enough {
background: #2b333b;
}
&.enough {
background: #00b43c;
color: #fff;
}
}
}
.ball-container {
.ball {
position: fixed;
left: 32px;
bottom: 22px;
z-index: 200;
transition: all 0.4s cubic-bezier(0.49, -0.29, 0.75, 0.41);
.inner {
width: 16px;
height: 16px;
border-radius: 50%;
background: rgb(0, 160, 220);
transition: all 0.4s linear;
}
}
}
.shopcart-list {
position: absolute;
top: 0;
left: 0;
z-index: -1;
width: 100%;
transform: translate3d(0, -100%, 0);
&.fold-enter-active, &.fold-leave-active {
transition: all 0.5s;
}
&.fold-enter, &.fold-leave-active {
transform: translate3d(0, 0, 0);
}
.list-header {
height: 40px;
line-height: 40px;
padding: 0 18px;
background: #f3f5f7;
border-bottom: 1px solid rgba(7, 17, 27, 0.1);
.title {
float: left;
font-size: 14px;
color: rgb(7, 17, 27);
}
.empty {
float: right;
font-size: 12px;
color: rgb(0, 160, 220);
}
}
.list-content {
padding: 0 18px;
max-height: 217px;
background: #fff;
overflow: hidden;
.food {
position: relative;
padding: 12px 0;
box-sizing: border-box;
border-1px(rgba(7, 17, 27, 0.1));
.name {
line-height: 24px;
font-size: 14px;
color: rgb(7, 17, 27);
}
.price {
position: absolute;
right: 90px;
bottom: 12px;
line-height: 24px;
font-weight: 700;
font-size: 14px;
color: rgb(240, 20, 20);
}
.cartcontrol-wrapper {
position: absolute;
right: 0;
bottom: 6px;
}
}
}
}
}
}
</style>
第三行'toggleList'为点击事件 ; 绑定在了整个组件上 ; 当购物车被点击时 ; 蒙层显示 ; 点击蒙层内元素时 ; 蒙层跟着消失了
点击蒙层内元素 ;不想让蒙层消失 ; 试了@click.stop没有效果
层级出现了问题~