微信扫一扫打赏支持

VUE参考---动画钩子函数

VUE参考---动画钩子函数

一、总结

一句话总结:

动画钩子函数,也就是用函数来写动画,也就是用js控制样式
  <div id="app">
    <input type="button" value="快到碗里来" @click="flag=!flag">
    <!-- 1. 使用 transition 元素把 小球包裹起来 -->
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @after-enter="afterEnter">
      <div class="ball" v-show="flag"></div>
    </transition>
  </div>

  <script>

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        flag: 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')
          this.flag = !this.flag
        }
      }
    });
  </script>

 

 

 

二、动画钩子函数

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

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5   <meta charset="UTF-8">
 6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8   <title>Document</title>
 9   <script src="./lib/vue-2.4.0.js"></script>
10   <style>
11     .ball {
12       width: 15px;
13       height: 15px;
14       border-radius: 50%;
15       background-color: red;
16     }
17   </style>
18 </head>
19 
20 <body>
21   <div id="app">
22     <input type="button" value="快到碗里来" @click="flag=!flag">
23     <!-- 1. 使用 transition 元素把 小球包裹起来 -->
24     <transition
25       @before-enter="beforeEnter"
26       @enter="enter"
27       @after-enter="afterEnter">
28       <div class="ball" v-show="flag"></div>
29     </transition>
30   </div>
31 
32   <script>
33 
34     // 创建 Vue 实例,得到 ViewModel
35     var vm = new Vue({
36       el: '#app',
37       data: {
38         flag: 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           this.flag = !this.flag
63         }
64       }
65     });
66   </script>
67 </body>
68 
69 </html>

 

 

 

 

 

 

 
posted @ 2020-04-21 11:41  范仁义  阅读(245)  评论(0编辑  收藏  举报