buyCart.vue
增加和减少按钮
顾名思义就是在选择食品数量的时相关动作,增加或减少。
思路:点击增加按钮,当前食品数量+1,也就是说当食品数量>=1时,同时显示减少按钮。当食品数量<1时,减少按钮隐藏。
由于buyCart作为基础组件,需要接收来自父组件的数据,这就要通过props定义相关数据,
|
|
当商品数量有值时显示减少图标使用v-if="foodNum"
做判断。
|
|
当购物车有变化的时候重新计算当前商品的数量。
|
|
监听购物车的变化,更新当前餐厅的购物车信息shopCart
,这就需要得到购物车列表cartList
的数据。使用vuex获取cartList
。
|
|
通过vuex mutation对购物车数据做增减处理。
添加购物车
通过state.cartList
获取购物车的数据cart
,然后通过cart
的shopId
获取到餐厅shop
,接着通过shop的category_id
获取餐厅菜单分类category
,最后通过category
的item_id
得到商品item
。点击一次增加图标商品数量num就会+1,然后设置存入本地存储 setStore('buyCart', state.cartList)
mutations.js
|
|
减少购物车
同理和增加购物车思路是一样的,先依次得到各个数据,点击一次减少图标商品数量num就会-1,然后设置存入本地存储 setStore('buyCart', state.cartList)
,否则商品数量为0,则清空当前商品的信息。
mutations.js
|
|
回到buyCart.vue组件中,分别对减少和增加图标创建点击事件removeOutCart()
和addToCart()
。引入mapMutation
直接对方法做处理就好了。
|
|
多规格商品购物车
这里首先要v-if和v-else做个判断,如果是多规格商品则显示多规格商品购物车,如果不是则显示增加购物车。
|
|
和增加减少按钮思路一样,点击增加按钮,当前食品数量+1,也就是说当食品数量>=1时,同时显示减少按钮。当食品数量<1时,减少按钮隐藏。同时对购物车商品数量进行实时监听,操作和前面的一样,这里就不多说了,直接贴代码吧:
|
|
点击选规格按钮触发showChooseList
点击事件。控制显示规格列表。data中定义showSpecs
默认为false,表示控制显示食品规格。定义specsIndex默认为0,表示当前选中的规格索引值。
|
|
当点击减少按钮时会弹出提示框,提示用户多规格商品只能去购物车删除,创建showReduceTip()
点击事件。data中定义showDeleteTip
默认为false,表示点击多规格商品减少按钮时弹出提示框。
|
|
显示多规格列表
点击多规格按钮后弹出多规格列表框,对框内dom进行填充数据渲染。多规格列表分为商品名称、商品明细及价格显示和加入购物车按钮。
商品名称
|
|
设置商品名称,对关闭框按钮绑定
showChooseList
事件。
商品明细
|
|
设置规格名称,遍历规格中的值
v-for="(item, itemIndex) in foods.specifications[0].values"
,同时绑定默认显示哪个index :class="{specs_activity: itemIndex == specsIndex}"
,点击哪个item后高亮显示同时记录当前所选规格的索引值,触发chooseSpecs(itemIndex)
点击事件。
|
|
价格显示和加入购物车按钮
|
|
设置规格商品价格,选择商品完成后点击加入购物车按钮触发
addSpecs()
点击事件。
|
|
点击加入购物车后记录选择后的商品id,同时关闭多规格列表提示框。
css动画渲染
当点击增加购物车按钮时会生成一个小球有做弧形下落的动画运动操作,同时当购物车数量num有值时显示num,减少购物车按钮做滚动动画显示。这些需要设置transition来实现一系列的动画操作。
初始渲染的过渡
点击添加购物车生成的小球做弧形下落的动画,因为小球动画只有一个方向(只执行单方向从上到下滚落),所以只用了before-enter和after-enter,这里我使用transition的appear特性设置节点在初始渲染的过渡,实现列表的渐进过渡。
appear表示是否在初始渲染使用过渡,也就是当前
transition
元素第一次渲染时的过渡动画。它的用法和enter的用法相似,它只是在第一次渲染的时候才会起作用。使用appear-class 之前先使用 prop appear,<transition appear appear-class="...." appear-active-class="....">
,也可以自定义JavaScript 钩子:<transition appear before-appear="...." after-appear="....">
。
data中定义showMoveDot
默认是[]
,表示控制下落的小球。遍历下落的小球v-for="(item,index) in showMoveDot"
。
|
|
这里自定义JavaScript 钩子@after-appear = "afterEnter"
和@before-appear="beforeEnter"
|
|
点击添加购物车按钮小球的运动弧度,如图:
设置减少购物车按钮的滚动动画效果
|
|
设置商品数量的动画
|
|
运动效果如图:
到此,购物车按钮及多规格商品按钮组件的开发到此为止!