• VUE实例课程---7、动画钩子函数


    VUE实例课程---7、动画钩子函数

    一、总结

    一句话总结:

    动画钩子函数也就是用函数(用js控制css)来操作动画,动画钩子函数中可以更加方便的操作动画,比如只实现半场动画,像物品添加到购物车的动画
    <div id="app">
        <!-- 1. 使用 transition 元素把 小球包裹起来 -->
        <transition
                @before-enter="beforeEnter"
                @enter="enter"
                @after-enter="afterEnter">
            <div class="ball" v-show="isShow"></div>
        </transition>
        <br>
        <button @click="isShow=!isShow">添加到购物车</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data: {
                isShow:false
            },
            methods: {
                // 注意: 动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
                // 大家可以认为 , el 是通过 document.getElementById('') 方式获取到的原生JS DOM对象
                beforeEnter(el){
                    // beforeEnter 表示动画入场之前,此时,动画尚未开始,可以 在 beforeEnter 中,设置元素开始动画之前的起始样式
                    // 设置小球开始动画之前的,起始位置
                    el.style.transform = "translate(0, 0)";
                },
                enter(el, done){
                    // 这句话,没有实际的作用,但是,如果不写,出不来动画效果;
                    // 可以认为 el.offsetWidth 会强制动画刷新
                    el.offsetWidth;
                    // enter 表示动画 开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
                    el.style.transform = "translate(150px, 450px)";
                    el.style.transition = 'all 1s ease';
    
                    // 这里的 done, 起始就是 afterEnter 这个函数,也就是说:done 是 afterEnter 函数的引用
                    done();
                },
                afterEnter(el){
                    // 动画完成之后,会调用 afterEnter
                    // console.log('ok')
                    // 只设置半场动画的关键,让isShow在这个半场中由false依旧变成false
                    //那么下次点击的时候依旧是从隐藏开始,依旧是进入的半场
                    this.isShow = !this.isShow;
                }
            }
        });
    </script>

    1、动画钩子函数分成两组,进场和离场,分别有哪些函数?

    进场动画钩子函数:before-enter、enter、after-enter、enter-cancelled
    离场动画钩子函数:before-leave、leave、after-leave、leave-cancelled
    <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>

    2、动画钩子函数的第一个参数el表示什么?

    动画钩子函数的第一个参数el表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
      methods: {
          // 注意: 动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
          // 大家可以认为 , el 是通过 document.getElementById('') 方式获取到的原生JS DOM对象
          beforeEnter(el){
              // beforeEnter 表示动画入场之前,此时,动画尚未开始,可以 在 beforeEnter 中,设置元素开始动画之前的起始样式
              // 设置小球开始动画之前的,起始位置
              el.style.transform = "translate(0, 0)";
          },
      }

    3、动画钩子函数 enter(el, done){}的第二个参数done表示什么意思?

    enter的第二个参数done, 起始就是 afterEnter 这个函数,也就是说:done 是 afterEnter 函数的引用,enter中执行done可以消除动画延迟
      methods: {
          // 注意: 动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
          // 大家可以认为 , el 是通过 document.getElementById('') 方式获取到的原生JS DOM对象
          beforeEnter(el){
              // beforeEnter 表示动画入场之前,此时,动画尚未开始,可以 在 beforeEnter 中,设置元素开始动画之前的起始样式
              // 设置小球开始动画之前的,起始位置
              el.style.transform = "translate(0, 0)";
          },
          enter(el, done){
              // 这句话,没有实际的作用,但是,如果不写,出不来动画效果;
              // 可以认为 el.offsetWidth 会强制动画刷新
              el.offsetWidth;
              // enter 表示动画 开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
              el.style.transform = "translate(150px, 450px)";
              el.style.transition = 'all 1s ease';
    
              // 这里的 done, 起始就是 afterEnter 这个函数,也就是说:done 是 afterEnter 函数的引用
              done();
          },
          afterEnter(el){
              // 动画完成之后,会调用 afterEnter
              // console.log('ok')
              // 只设置半场动画的关键,让isShow在这个半场中由false依旧变成false
              this.isShow = !this.isShow;
          }
      }

    4、动画钩子函数实例(做小球半场动画)中 afterEnter 动画钩子函数中的 this.isShow = !this.isShow; 的意义是什么 ?

    |||-begin

      methods: {
          // 注意: 动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
          // 大家可以认为 , el 是通过 document.getElementById('') 方式获取到的原生JS DOM对象
          beforeEnter(el){
              // beforeEnter 表示动画入场之前,此时,动画尚未开始,可以 在 beforeEnter 中,设置元素开始动画之前的起始样式
              // 设置小球开始动画之前的,起始位置
              el.style.transform = "translate(0, 0)";
          },
          enter(el, done){
              // 这句话,没有实际的作用,但是,如果不写,出不来动画效果;
              // 可以认为 el.offsetWidth 会强制动画刷新
              el.offsetWidth;
              // enter 表示动画 开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
              el.style.transform = "translate(150px, 450px)";
              el.style.transition = 'all 1s ease';
    
              // 这里的 done, 起始就是 afterEnter 这个函数,也就是说:done 是 afterEnter 函数的引用
              done();
          },
          afterEnter(el){
              // 动画完成之后,会调用 afterEnter
              // console.log('ok')
              // 只设置半场动画的关键,让isShow在这个半场中由false依旧变成false
              this.isShow = !this.isShow;
          }
      }

    |||-end

    this.isShow = !this.isShow 是只设置半场动画的关键,让isShow在这个半场中由false依旧变成false,那么下次点击的时候依旧是从隐藏开始,依旧是进入的半场,直接跳过后半场动画

    二、动画钩子函数

    博客对应课程的视频位置:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>动画钩子函数</title>
     6     <style>
     7         .ball {
     8             width: 15px;
     9             height: 15px;
    10             border-radius: 50%;
    11             background-color: red;
    12         }
    13     </style>
    14 </head>
    15 <body>
    16 <!--
    17 
    18 动画钩子函数也就是用函数(用js控制css)来操作动画,动画钩子函数中可以更加方便的操作动画,比如只实现半场动画,像物品添加到购物车的动画
    19 
    20 
    21 -->
    22 <div id="app">
    23     <!-- 1. 使用 transition 元素把 小球包裹起来 -->
    24     <transition
    25             @before-enter="beforeEnter"
    26             @enter="enter"
    27             @after-enter="afterEnter">
    28         <div class="ball" v-show="isShow"></div>
    29     </transition>
    30     <br>
    31     <button @click="isShow=!isShow">添加到购物车</button>
    32 </div>
    33 <script src="../js/vue.js"></script>
    34 <script>
    35     let vm = new Vue({
    36         el: '#app',
    37         data: {
    38             isShow:false
    39         },
    40         methods: {
    41             // 注意: 动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的 JS DOM对象
    42             // 大家可以认为 , el 是通过 document.getElementById('') 方式获取到的原生JS DOM对象
    43             beforeEnter(el){
    44                 // beforeEnter 表示动画入场之前,此时,动画尚未开始,可以 在 beforeEnter 中,设置元素开始动画之前的起始样式
    45                 // 设置小球开始动画之前的,起始位置
    46                 el.style.transform = "translate(0, 0)";
    47             },
    48             enter(el, done){
    49                 // 这句话,没有实际的作用,但是,如果不写,出不来动画效果;
    50                 // 可以认为 el.offsetWidth 会强制动画刷新
    51                 el.offsetWidth;
    52                 // enter 表示动画 开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
    53                 el.style.transform = "translate(150px, 450px)";
    54                 el.style.transition = 'all 1s ease';
    55 
    56                 // 这里的 done, 起始就是 afterEnter 这个函数,也就是说:done 是 afterEnter 函数的引用
    57                 done();
    58             },
    59             afterEnter(el){
    60                 // 动画完成之后,会调用 afterEnter
    61                 // console.log('ok')
    62                 // 只设置半场动画的关键,让isShow在这个半场中由false依旧变成false
    63                 //那么下次点击的时候依旧是从隐藏开始,依旧是进入的半场
    64                 this.isShow = !this.isShow;
    65             }
    66         }
    67     });
    68 </script>
    69 </body>
    70 </html>
     
  • 相关阅读:
    【Hadoop环境搭建】Centos6.8搭建hadoop伪分布模式
    【Java安装】Centos6.8 安装Java1.6
    【SVN】win7 搭建SVN服务器
    【KVM】Ubuntu14.04 安装KVM
    【VNC】Ubuntu14.04LTS下安装VNC View
    【虚拟化】支持IDE/SATA/SCSI
    【KVM安装】在Centos6.8中安装KVM
    【脚本】新增未扩展磁盘容量
    【SVN】自动定时更新
    【GIS】地球经纬度和米换算(转)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12758247.html
Copyright © 2020-2023  润新知