1.
<template>
<div class="animal">
<div>
<button @click="flag = !flag">toggle</button>
<transition>
<h3 v-show="flag">我是一个H3</h3>
</transition>
<hr>
<button @click="flag2 = !flag2">toggle2</button>
<transition name="my">
<h4 v-show="flag2">我是一个H4</h4>
</transition>
<hr>
<input type="button" value="快到碗里来" @click="flag3 = !flag3">
<transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
<div class="ball"></div>
</transition>
</div>
</div>
</template>
<script>
export default {
name: 'animal',
props: {
msg: String
},
data () {
return {
flag: false,
flag2: false,
flag3: false
}
},
methods: {
beforeEnter (el) {
el.style.transform = 'translate(0,0)'
},
enter (el) {
el.offsetWidth
el.style.transform = 'translate(150px,450px)'
el.style.transition = 'all 1s ease'
},
afterEnter (el) {
}
}
}
</script>
<style scoped lang="stylus">
// 进入 和离开时候是一个状态
.v-enter, .v-leave-to
opacity 0
transform translateX(180px)
// 过程中动画
.v-enter-active, .v-leave-active
transition all 0.5s
// -----------------------------------------demo2
// 进入 和离开时候是一个状态
.my-enter, .my-leave-to
opacity 0
transform translateY(180px)
// 过程中动画
.my-enter-active, .my-leave-active
transition all 0.5s
// -----------------------------------------demo3
.ball
width 15px
height 15px
border-radius 50%
background-color red
</style>
2. 列表动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动画组</title>
<script src="./js/vue.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
body {
padding: 20px;
}
li {
list-style: none;
border: 1px dashed #cccccc;
padding: 10px;
}
li:hover {
background-color: hotpink;
transition: all 1s ease;
}
.v-enter,
.v-leave-to {
opacity: 0;
transform: translateY(130px);
}
.v-enter-active,
.v-leave-active {
transition: all 1s ease;
}
.v-move {
transition: all 1s ease;
}
.v-leave-active {
position: absolute;
}
</style>
</head>
<body>
<div id="app">
<div>
<label for="">
ID
<input type="text" v-model='id'>
</label>
<label for="">
name
<input type="text" v-model='name'>
</label>
<input type="button" value="添加" @click='add'>
</div>
<div>
<ul>
<transition-group appear>
<li v-for='(item,index) in list' :key='index' @click='del(index)'>
{{item.id}}-----{{item.name}}
</li>
</transition-group>
</ul>
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
id: '',
name: '',
list: [{
id: '1',
name: '刘德华'
}, {
id: '2',
name: '张学友'
}, {
id: '3',
name: '张学友2'
}, {
id: '4',
name: '张学友3'
}]
},
methods: {
add() {
this.list.push({
id: this.id,
name: this.name
})
this.id = this.name = ''
},
del(index) {
this.list.splice(index, 1)
}
}
});
</script>
</body>
</html>