在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>
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?