【黑马程序员西安校区】Vue中动画的使用 Vue中动画的使用 Vue的中动画,并不像想象中的那样强大,它只能控制标签或者组件的显示到隐藏,或者隐藏到显示的过程。 所以它能控制的过程有两个: 1、从显示

Vue中动画的使用
Vue 的中动画,并不像想象中的那样强大,它只能控制标签或者组件的显示到隐藏,或者隐藏到显示的过程。
所以它能控制的过程有两个:
1、从显示到隐藏
2、从隐藏到显示
Vue 的指令中,恰好有 v-if v-show 正是控制元素或者标签的显示或者隐藏的,所以 vue 的动画,往往需要在标签中结合 v-if 或者 v-show 来进行使用。

下面介绍几种动画实现的方式:        
1 、使用自己写类样式来实现动画
<transition>
<h3 v-if="flag">这是一个H3</h3>
</transition>
如何理解以上代码呢?
给了h3 外包裹了一层 transition 之后,当 h3 通过 v-if 或者 v-show 进行显示         或者隐藏的时候,Vue 会给 h3 标签增加一系列类样式。
以隐藏到显示的过程说明:
(1)   v-enter 这个是 vue 在即将动画开始的一瞬间为元素增加的,然后瞬间移除。我们可以自己写一个 class 类样式就叫做 v-enter, v-enter 中设置该元素在此状态下的初始值。
.v-enter{
transform:translateX(400px);
}
(2)   v-enter-active 这个是在整个动画的过程中都存在的类样式。我们可以自己写一个类样式就叫做 v-enter-active, v-enter-active 中设置该元素的过渡规则。
.v-enter{
transition:transform 1s linear;
}

(3)  v-enter-to 这个是在整个动画的过程中都存在的类样式,但是添加该类的时机比 v-enter-active 更晚一点 . 我们可以在 v-enter-to 设置元素的目标位置。

所以总结如下:
                        v-enter  设置元素的初始状态  
                        v-enter-to  设置元素的结束状态
                        v-enter-active  设置过渡规则
                 我们也可以更改类样式的前缀,将v- 中的 v 变成我们自己想要的名称,通过 name 属性指定
                        <transition name="haha">
                          <h3 v-if="flag"> 这是一个 H3</h3>
                        </transition>
2 、使用第三方库 Animate.css
                 1 中我们知道 Vue 会给 h3 标签增加一系列类样式,样式的名称默认是 v-xxx 的形式 , 如果我们想改变这些
                 类样式名称,让他使用Animate 中已经有的类样式名称,可以给 transition 设置
                <transition
                        enter-active-class="bounceIn" ,
                        enter-to-class="haha" ,
                        leave-active-class="bounceOut"
                        :duration="{ enter: 20000, leave: 40000 }">
                          <h3 v-if="flag" class="animated"> 这是一个 H3</h3>
                </transition>

                :duration 控制的不是动画的时长,而是样式存在的时长
3 、使用回调函数
                <transition
                  @before-enter="beforeEnter"
                  @enter="enter"
                  @after-enter="afterEnter">
                  <div class="ball" v-show="flag"></div>
                </transition>
                data:{
                        flag:false
                },
                methods:{
                        afterEnter(){
                                this.flag = !this.flag
                        }
                }
4 、列表动画
                 元素如果是通过v-for 方式来循环渲染, transition 这个标签就不知道该加给谁
                <transition-group appear tag="ul">
                        <li v-for="(item, i) in list" :key="item.id" @click="del(i)">
                          {{item.id}} --- {{item.name}}
                        </li>
        </transition-group>

            依然要写v-xxx 的类样式,参照动画第一种使用方式

            删除元素时,其他元素会增加的类样式
           .v-move {
                        transition: all 6s ease;
                }

                这个是为了让被删除的元素不占位,不占位了,它下边的元素就能往上走
                 而我们在v-move 中有设置了过度规则,所以会慢慢的往上走
                .v-leave-active{
                  position: absolute;
                }  

                appear  第一次加载的时候,给列表的所有元素执行动画
                tag :默认 transition-group 会给所包裹的标签增加一个大的父容器 span
                         如果由于这个span 产生了问题,比如样式运用不上等,那么我们可以修改这个值

猜你喜欢

转载自blog.csdn.net/qq_39581763/article/details/80446760