详解Vue中过度动画效果应用


Posted in Javascript onMay 25, 2017

一、实现动画过渡效果的几种方式

实现动画必须要将要进行动画的元素利用<transition>标签进行包裹

1、利用CSS样式实现过渡效果

<transition name="fade"></transition>

1.v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。

2.v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。

3.v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。

4.v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后

详解Vue中过度动画效果应用

通过name的名称进行重命名,在样式文件中进行.fade-enter-active设置动画的效果即transition属性,需要注意的是动画结束后样式将会移除,所以如果想要动画实现之后元素保持有某个样式,则需要transition标签里面的元素的样式表中进行设置,此情况是针对元需要通过改变元素的属性来显示元素,如定位top,left以及通过transform将显示的元素的位置改变从而让元素出现在当前的视图窗口中时,但是如果元素v-show为true之后元素已经在视图中央显示了,不需要位置的移动将元素移动到视图中,只是想要显示的时候显示有动画效果的,则直接将动画结束的属性设置在v-enter-active/v-leave-active中即可。也就是说动画的属性如果只是产生效果,不对元素的任何属性进行修改,也就是动画中的属性样式不需要永久添加到dom元素中,则直接按后者的方式定义,如果说动画的属性同时相对元素进行样式设计,属性样式需要被添加到dom元素上,则需要按照前者的方式。

<transition name="fold">
    <div class="shopcart-list" v-show="listShow">
     <div class="list-header">
      <h1 class="title">购物车</h1>
      <span class="empty" @click="empty">清空</span>
     </div>
     <div class="list-content" ref="list">
      <ul>
       <li class="food border-1px" v-for="(food,index) in selectFoods" v-show="food.count>0">
        <span class="name">{{selectName[index]}}</span>
        <div class="price">
         <span>¥{{food.price*food.count}}</span>
        </div>
        <div class="cartcontrol-wrapper">
         <v-cartcontrol :food="food"></v-cartcontrol>
        </div>
       </li>
      </ul>
     </div>
    </div>
   </transition>
.fold-enter-active,.fold-leave-active
   transition:all 0.5s
  .fold-enter,.fold-leave
   transform :translate3d(0,0,0)
  .shopcart-list
   position:absolute
   transform:translate3d(0,-100%,0)//动画结束后的效果需要在此处进行设置,设置在.fold-enter-active中,元素动画结束后该样式属性会被移除掉,将会看不到想要的效果
   top: 100%//元素即使显示也不再视图窗口中,通过transform实现显示
   z-index:-1
   width:100%

2、利用animation或者是动画库实现动画效果

<div id="example-2">
 <button @click="show = !show">Toggle show</button>
 <transition name="bounce">
  <p v-if="show">Look at me!</p>
 </transition>
</div>
new Vue({
 el: '#example-2',
 data: {
  show: true
 }
})
.bounce-enter-active {
 animation: bounce-in 0.5s linear;
}
.bounce-leave-active {
 animation: bounce-out 0.5s linear;
}
@keyframes bounce-in {
 0% {
  transform: scale(0);
 }
 50% {
  transform: scale(1.5);
 }
 100% {
  transform: scale(1);
 }
}
@keyframes bounce-out {
 0% {
  transform: scale(1);
 }
 50% {
  transform: scale(1.5);
 }
 100% {
  transform: scale(0);
 }
}

3、自定义过度类名

  1. enter-class
  2. enter-active-class
  3. leave-class
  4. leave-active-class

 他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css 结合使用十分有用。

<link href="https://unpkg.com/animate.css@3.5.1/animate.min.css" rel="external nofollow" rel="stylesheet" type="text/css">

<div id="example-3">

 <button @click="show = !show">

  Toggle render

 </button>

 <transition

  name="custom-classes-transition"

  enter-active-class="animated tada"

  leave-active-class="animated bounceOutRight"

 >

  <p v-if="show">hello</p>

 </transition>

</div>
new Vue({
 el: '#example-3',
 data: {
  show: true
 }
})

可以在样式中同时使用transition和animation

4、利用JavaScript钩子函数实现过渡效果

<transition
 v-on:before-enter="beforeEnter"
 v-on:enter="enter"
 v-on:after-enter="afterEnter"
 v-on:enter-cancelled="enterCancelled"
 v-on:before-leave="beforeLeave"
 v-on:leave="leave"
 v-on:after-leave="afterLeave"
 v-on:leave-cancelled="leaveCancelled"
>
 <!-- ... -->
</transition>
methods: {
 // --------
 // 进入中
 // --------
 beforeEnter: function (el) {
  // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 enter: function (el, done) {
  // ...
  done()
 },
 afterEnter: function (el) {
  // ...
 },
 enterCancelled: function (el) {
  // ...
 },
 // --------
 // 离开时
 // --------
 beforeLeave: function (el) {
  // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 leave: function (el, done) {
  // ...
  done()
 },
 afterLeave: function (el) {
  // ...
 },
 // leaveCancelled 只用于 v-show 中
 leaveCancelled: function (el) {
  // ...
 }
}

在使用钩子函数实现动画的时候注意dom的异步刷新,需要结合this.$nextTick(),同时在leave和enter中设置样式前最好迫使dom进行回流(reflow)使dom重新渲染,如获取元素的offsetHeight等,然后在this.$nextTick()中设置新的样式,不然又可能实现不了动画的效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
Jquery实现遮罩层的方法
Jun 08 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
Web前端框架bootstrap实战【第一次接触使用】
Dec 28 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
详谈js模块化规范
Jul 07 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
基于vue实现swipe轮播组件实例代码
May 24 #Javascript
js实现分页功能
May 24 #Javascript
基于Vue的文字跑马灯组件(npm 组件包)
May 24 #Javascript
React简单介绍
May 24 #Javascript
bootstrap3使用bootstrap datetimepicker日期插件
May 24 #Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 #Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
May 24 #Javascript
You might like
php IP及IP段进行访问限制的代码
2008/12/17 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
Python单例模式实例分析
2015/01/14 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
利用python循环创建多个文件的方法
2018/10/25 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
实习会计求职自荐信范文
2014/03/10 职场文书
揭牌仪式主持词
2014/03/19 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
项目投资合作意向书
2014/07/29 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2015年老干部工作总结
2015/04/23 职场文书
预备党员群众意见
2015/06/01 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
浅谈Redis中的RDB快照
2021/06/29 Redis
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL