个人blog-1: 拾忆生活
个人blog-2: 极简-拾忆生活
欢迎大家来踩,同步更新
记住:唯一的限制是你的想象力。
以下单组件的抽离,格式不正确,只是为了结合理解。
过渡效果
- 在
<style>
中定义 css 效果 - 第三方 CSS 动画库
Animate.css
- 第三方 JavaScript 动画库
Velocity.js
- 过渡钩子函数【重点】
- methods 里面直接定义函数
- 并在
<transition>
组件中用v-on绑定过渡状态和methods里的函数
封装组件–transition
四种使用情形
- 条件渲染 (使用 v-if)
- 条件展示 (使用 v-show)
- 动态组件
- 组件根节点
<template>
<div id="app">
<button v-on:click="show = !show">
Toggle
</button>
<transition name="fade">
<p v-if="show">hello</p>
</transition>
</div>
</template>
<script>
export default {
name: 'app',
data: {
show: true
}
}
</script>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
</style>
过渡的类名
在进入/离开的过渡中,有 6 个 class 切换
-
v-enter
- 定义进入过渡的开始状态。
- 在元素被插入之前生效,在元素被插入之后的下一帧移除。
-
v-enter-active
- 定义进入过渡生效时的状态。
- 在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
-
v-enter-to
- 定义进入过渡的结束状态。
- 在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
-
v-leave
- 定义离开过渡的开始状态。
- 在离开过渡被触发时立刻生效,下一帧被移除。
-
v-leave-active
- 定义离开过渡生效时的状态。
- 在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
-
v-leave-to
- 定义离开过渡的结束状态。
- 在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除
注意1: 对于这些在过渡中切换的类名来说
- 如果使用一个没有name属性的
<transition>
,则 v- 是这些类名的默认前缀。 - 如果使用
<transition name="my-transition">
,那么 v-enter 会替换为 my-transition-enter
注意2: 过渡transition 与 动画animation 的区别
- 过渡transition
- v-enter 类名在节点插入 DOM 后会立即删除
- 动画animation
- v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除。
css过渡【样式里的transition】
- 在
<transition>
组件里 使用 name 特性 - 绑类名 css 样式,以name属性值为基准,例子为slide-fade,后面短横线连接6大css的class
.slide-fade-enter
.slide-fade-enter-active
.slide-fade-leave-active
.slide-fade-leave-to
<template>
<div id="example-1">
<button @click="show = !show">
Toggle render
</button>
<transition name="slide-fade">
<p v-if="show">hello</p>
</transition>
</div>
</template>
<script>
export default {
el: '#example-1',
data: {
show: true
}
}
</script>
<style scoped>
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
</style>
css动画【样式里的animation】
<template>
<div id="example-2">
<button @click="show = !show">Toggle show</button>
<transition name="bounce">
<p v-if="show">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>
</transition>
</div>
</template>
<script>
export default {
el: '#example-2',
data: {
show: true
}
}
</script>
<style scoped>
.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
</style>
用第三方css库【Animate.css 】
- 引用
<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
enter-class
enter-active-class
enter-to-class
leave-class
leave-active-class
leave-to-class
- 在
<transition>
组件中绑定类名和第三方库中的样式名
<template>
<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
<div id="example-3">
<button @click="show = !show">
Toggle render
</button>
<transition
name="custom-classes-transition"
enter-active-class="animated tada"
leave-active-class="animated bounceOutRight"
>
<p v-if="show">hello</p>
</transition>
</div>
</template>
<script>
export default {
el: '#example-3',
data: {
show: true
}
}
</script>
css过渡和动画结合【样式里的transition和animation】
- 1、隐式过渡持续时间:必须设置相应的事件监听器
- 默认vue自动得出过渡效果的完成时机
- 2、在
<transition>
标签中使用 type attribute(属性)来明确声明你需要 Vue 监听的类型【即选择设定哪个为主动效】type="transition"
type="animation"
实例:
- 这里涉及到appear下面在讲
- type=“transition” ,设置过渡为主动效
- 在style样式中的是transition过渡
- 在transition标签中的类名是animate.css第三方库的animate动画
<template>
<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
<div id="root">
<transition
type="transition"
name="fade"
appear
enter-active-class="animated swing fade-enter-active"
leave-active-class="animated bounce fade-leave-active"
appear-active-class="animated swing"
>
<