动画钩子函数

如果想要实现自定义动画,此时就要用到 动画钩子函数

<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 结合使用时
  // 回调函数 done 是可选的
  enter: function (el, done) {
    // ...
    done()
  },
  afterEnter: function (el) {
    // ...
  },
  enterCancelled: function (el) {
    // ...
  },

  // --------
  // 离开时
  // --------

  beforeLeave: function (el) {
    // ...
  },
  // 当与 CSS 结合使用时
  // 回调函数 done 是可选的
  leave: function (el, done) {
    // ...
    done()
  },
  afterLeave: function (el) {
    // ...
  },
  // leaveCancelled 只用于 v-show 中
  leaveCancelled: function (el) {
    // ...
  }
}

利用钩子函数实现了一个小球的动画:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<style>
    .ball{
        width:20px;
        height: 20px;
        border-radius: 50%;
        background-color: red;
    }
</style>
<body>
<!--需求:点击按钮让H3显示 再点击让H3隐藏-->
<div id="app">
    <input type="button" value="toggle" @click="flag=!flag">

<transition
@before-enter="beforeEnter"
    @enter="enter"
@after-enter="afterEnter"
>
    <div v-if="flag" class="ball"></div>
</transition>
</div>
</body>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
            flag:false
        },
        methods:{
            /*第一个参数el 表示要执行动画的那个DOM元素,是个原生的JS DOM对象*/
            /*可以认为 el是通过document.getElementById() 获取的*/
            beforeEnter(el){
                //表示动画入场之前 此时动画尚未开始 可以在beforeEnter中 设置元素开始动画之前的起始样式
                el.style.transform="translate(0,0)"
            },
            enter(el,done){
                //el.offsetWidth没有实际的作用,但是,如果不写,出不来动画效果;
                //可以认为,el.offsetWidth 会强制动画刷新
                el.offsetWidth
                //动画开始之后的样式,可以设置小球完成动画之后的 结束状态
                el.style.transform="translate(150px,450px)";
                el.style.transition="all 0.6s ease"
                //这里的done 其实就是 afterEnter这个函数,也就是说,done是afterEnter函数的引用
                done()
            },
            afterEnter(el){
                //动画完成之后
                this.flag=!this.flag
            }
        }
    })
</script>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 11,368评论 1 38
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,035评论 3 119
  • 基因测序的爆裂太温柔,让我无法将就。今天是周日,公司的工作人员们去掉一周的疲惫,静下来对一周的工作进行着总结工作。...
    将暮未暮_5083阅读 1,625评论 0 0
  • 第一次去龙潭公园写生,我们收获了很多。 我记得我第一次画建筑的时候,我是用铅笔来像画素描一样的去打...
    Three_H阅读 1,807评论 2 4
  • 介绍 是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。 square官方对...
    诡异的叶子阅读 3,984评论 1 5