在Vue.js中,transition 是一种内置组件,可以用来添加进入/离开的过渡效果给元素或组件。
transition 包裹你要动画化的元素,然后你可以定义进入和离开的动画状态。
当你使用 <transition> 组件时,你需要提供一个动画名字。这个名字将用于定义CSS类名,以便你可以对动画进行样式化。<transition name="fade"> <!-- 需要动画效果的元素 --> </transition>
需要注意的是需要动画效果的元素必须是下列一种:
条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点
在这里fade是我们自定义的动画名称。然后在CSS中,你可以定义对应的样式:
你要的名字-enter 进入前效果 你要的名字-enter-active 进入的过渡时间和函数 你要的名字-enter-to 进入后效果 你要的名字-leave 离开前效果 你要的名字-leave-active 离开的过渡时间和函数 你要的名字-leave-to 离开后效果例如:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to /* 2.1.8版本及以后 */ {
opacity: 0;
}在上面的例子中,.fade-enter-active 和 .fade-leave-active 类定义了元素在进入或者离开时的过渡动画。
.fade-enter 和 .fade-leave-to 类定义了进入和离开状态的起点和终点样式。
当你切换具有相同标签名的元素时,你需要使用 key 属性来给每个元素一个独一无二的标记。
这是因为 Vue 会尝试尽可能高效地重新使用元素,如果没有独特的 key 区分开来,Vue 只会替换元素的内容而不是过渡整个元素。
这里是一个错误的使用示例,没有使用 key 属性:<transition name="fade"> <div v-if="show"> <div class="item-box"></div> </div> <div v-else> <span>暂无更多</span> </div> </transition>若要解决这个问题,应该这样做:
<transition name="fade"> <div v-if="show" key="box1"> <div class="item-box"></div> </div> <div v-else key="box2"> <span>暂无更多</span> </div> </transition>
在加入了 key 属性后,Vue 就能够正确地处理这些不同的元素,并给它们添加动画效果。
完整示例代码:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1-dev.js"></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>
</head>
<body>
<div id="app">
<div @click="fin">点击</div>
<transition name="fade">
<div v-show="finished" class="question-over">
<p>您的成绩:1分</p>
<p>您答对了:1题</p>
<p>耗时:0</p>
</div>
</transition>
</div>
<script>
var intval=null;
var app = new Vue({
el: '#app',
data: {
finished:false,
},
methods: {
fin() {
this.finished=true;
},
},
mounted() {
}
})
</script>
</body>
</html> 网友回复


