+
80
-

vue2的transition如何使用?

vue2的transition如何使用?


网友回复

+
0
-

在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>

我知道答案,我要回答