A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Vue中动画的使用
Vue的中动画,并不像想象中的那样强大,它只能控制标签或者组件的显示到隐藏,或者隐藏到显示的过程。
所以它能控制的过程有两个:
1、从显示到隐藏
2、从隐藏到显示
Vue的指令中,恰好有v-ifv-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产生了问题,比如样式运用不上等,那么我们可以修改这个值


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马