美文网首页
动画钩子函数

动画钩子函数

作者: A_9c74 | 来源:发表于2018-11-10 21:55 被阅读0次

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

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

相关文章

网友评论

      本文标题:动画钩子函数

      本文链接:https://www.haomeiwen.com/subject/akutfqtx.html