學(xué)習(xí)vue2.0,使用仿餓了么項(xiàng)目練習(xí),其中購物車小球動(dòng)畫沒有效果,看了一些其他人得代碼,還是沒有找到原因.
下面貼出我的代碼,和別人代碼得鏈接
<template>
<div class="shopcart">
<div class="content">
<div class="content-left">
<div class="logo-wrapper">
<div class="logo" :class="{'highlight' : totalCount>0}">
<i class="icon-shopping_cart" :class="{'highlight' : totalCount>0}"></i>
</div>
<div class="num" v-show="totalCount>0">{{totalCount}}</div>
</div>
<div class="price" :class="{'highlight' : totalCount>0}">¥{{totalPrice}}元</div>
<div class="desc">另需配送費(fèi) ¥{{deliveryPrice}}元</div>
</div>
<div class=" content-right">
<div class="pay" :class="payClass">
{{payDesc}}
</div>
</div>
</div>
<div class="ball-container">
<transition-group name="drop" v-on:before-enter="beforeEnter" v-on:enter="whenenter" v-on:after-enter="afterEnter" v-on:before-leave="beforeLeave"
v-on:leave="leave" v-on:after-leave="afterLeave">
<div class="ball" v-for="(ball, index) in balls" v-show="ball.show" :key="index">
<div class="inner inner-hook"></div>
</div>
</transition-group>
</div>
</div>
</template>
<script type="text/ecmascript-6">
import { bus } from '../../util/bus.js'
export default {
props: {
selectFoods: {
type: Array,
default () {
return [
{
price: 0,
count: 0
}
]
}
},
deliveryPrice: {
type: Number,
default: 0
},
minPrice: {
type: Number,
default: 0
}
},
data () {
return {
balls: [
{
show: false
},
{
show: false
},
{
show: false
},
{
show: false
},
{
show: false
},
{
show: false
},
{
show: false
}
],
droppedBalls: []
}
},
created () {
console.log('created')
bus.$on('addcart', this.dropBall)
},
methods: {
beforeEnter: function (el) {
console.log('before enter...\n')
let count = this.balls.length
while (count--) {
let ball = this.balls[count]
if (ball.show) {
let rect = ball.el.getBoundingClientRect()
let x = rect.left - 32
let y = -(window.innerHeight - rect.top - 22)
el.style.display = ''
el.style.webkitTransform = `translate3d(0,${y}px,0)`
el.style.transform = `translate3d(0,${y}px,0)`
let inner = el.getElementsByClassName('inner-hook')[0]
inner.style.webkitTransform = `translate3d(${x}px,0,0)`
inner.style.transform = `translate3d(${x}px,0,0)`
}
}
},
whenenter: function (el, done) {
/* eslint-disable no-unused-vars */
console.log('when enter animate---\n')
let rf = el.offsetHeight
this.$nextTick(() => {
el.style.display = ''
el.style.webkitTransform = 'translate3d(0,0,0)'
el.style.transform = 'translate3d(0,0,0)'
let inner = el.getElementsByClassName('inner-hook')[0]
inner.style.webkitTransform = 'translate3d(0,0,0)'
inner.style.transform = 'translate3d(0,0,0)'
done()
})
},
afterEnter: function (el) {
console.log('after enter animate...\n')
let ball = this.droppedBalls.shift()
if (ball) {
ball.show = false
el.style.display = 'none'
}
},
beforeLeave: function (el) {
// ...
console.log('before leave animate...\n')
},
leave: function (el, done) {
// ...
console.log('leave animate...\n')
done()
},
afterLeave: function (el) {
// ...
console.log('after leave animate...\n')
},
dropBall (el) {
console.log('dropBall method,el: ' + el)
for (let i = 0; i < this.balls.length; i++) {
let ball = this.balls[i]
if (!ball.show) {
ball.show = true
ball.el = el
this.droppedBalls.push(ball)
return
}
}
}
},
computed: {
totalPrice () {
let total = 0
this.selectFoods.forEach((food) => {
total += food.price * food.count
})
return total
},
totalCount () {
let count = 0
this.selectFoods.forEach((food) => {
count += food.count
})
return count
},
payDesc () {
if (this.totalPrice === 0) {
return `¥${this.minPrice}元起送`
} else if (this.totalPrice < this.minPrice) {
let diff = this.minPrice - this.totalPrice
return `還差¥${diff}元起送`
} else {
return '去結(jié)算'
}
},
payClass () {
if (this.totalPrice < this.minPrice) {
return 'not-enough'
} else {
return 'enough'
}
}
}
}
</script>
<style lang="stylus" rel="stylesheet/stylus">
.shopcart
position: fixed
left: 0
bottom: 0
z-index: 50
width: 100%
height: 48px
background: #f00
.content
display: flex
background: #141d27
font-size: 0
height: 100%
color: rgba(255, 255, 255, 0.4)
.content-left
flex: 1
.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: rgb(43, 52, 60)
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
background: rgb(240, 20, 20)
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4)
.price
display: inline-block
vertical-align: top
margin-top: 12px
padding-right: 12px
line-height: 24px
box-sizing: border-box
border-right: 1px solid rgba(255, 255, 255, 0.2)
font-size: 16px
font-weight: 700
&.highlight
color: #fff
.desc
display: inline-block
vertical-align: top
margin-top: 12px
padding-left: 12px
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
&.not-enough
background: #2b333b
&.enough
background: #00b43c
color: #fff
.ball-container
transition: all 1
.ball
position: fixed
left: 32px
bottom: 22px
z-index: 200
width: 18px
height: 18px
border-radius: 50%
transition: all 1s
&.drop-enter-to, &.drop-leave-to
transition all 0.4s
.inner
width: 16px
height: 16px
border-radius: 50%
background: rgb(0,160,220)
transition: all 1s linear
</style>
調(diào)試過三個(gè)鉤子函數(shù),
beforeEnter: function (el) {
},
enter: function (el, done) {
done()
},
afterEnter: function (el) {
},
鉤子函數(shù)中dom節(jié)點(diǎn)獲取沒有問題,小球得style也正確設(shè)置了, 但是過渡動(dòng)畫沒有效果,嘗試很久實(shí)在不知道原因出現(xiàn)在哪,希望高手幫幫忙.
下面參考別人github上完整項(xiàng)目代碼的鏈接:
https://github.com/moxiaojing...
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。