• Vue,动画-使用钩子函数模拟小球半场动画


    动画-使用钩子函数模拟小球半场动画

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title></title>
     6     </head>
     7     <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
     8     <style type="text/css">
     9         .ball{
    10             height: 15px;
    11             width: 15px;
    12             background: red;
    13             border-radius: 50%;
    14         }
    15     </style>
    16     <body>
    17         <div id="app">
    18             <input type="button" id="" value="快到碗里来" @click="flag =! flag"/>
    19             <!-- 1. 使用 transition 元素把小球 包裹起来 -->
    20             <transition 
    21                 @before-enter="beforeEnter"
    22                 @enter="enter"
    23                 @after-enter="afterEnter">
    24                 <div class="ball" v-show="flag"></div>    
    25             </transition>
    26             
    27         </div>
    28     </body>
    29 </html>
    30 <script>
    31     var vm = new Vue({
    32         el:'#app',
    33         data:{
    34             flag: false
    35         },
    36         methods:{
    37             // 注意: 动画钩子函数的第一个参数:el, 表示 要执行动画的那个DOM元素, 是个原生的 JS DOM对象
    38             beforeEnter(el){
    39                 //   beforeEnter 表示动画入场之前, 此时, 动画尚未开始, 可以 在 beforeEnter 中, 设置元素
    40                 // 开始动画之前的起始样式
    41             // 设置小球开始动画的, 起始位置    
    42                 el.style.transform = "translate(0, 0)"
    43                 
    44             },
    45             enter(el, done){
    46             
    47                 // 这句话 没有实际作用, 但是, 如果不写, 出不来实际的效果
    48                 // 可以认为 offsetWidth 会强制动画的刷新
    49                 el.offsetWidth
    50             // enter 表示动画 开始之后的样式, 这里, 可以设置小球完成动画之后的, 结束状态
    51             el.style.transform = "translate(150px, 450px)"
    52             // 经过1s 到达实际位置
    53             el.style.transition = 'all 1s ease'
    54             
    55             // 这里的 done, 起始就是 afterEnter 这个函数, 也就是说: done 是 afterEnter 函数的引用
    56             done()
    57             },
    58             afterEnter(el){
    59                 console.log("动画执行结束")
    60                 this.flag = ! this.flag 
    61             }
    62         }
    63     })
    64 </script>

    效果图

    一定要在enter 里调用 done 否则 不会立即消失

  • 相关阅读:
    Vue 环境配置
    导入解决方案错误及其解决办法
    Dynamics 365创建用户提示:您正在尝试使用已由其他用户使用的域登录来创建用户。的解决办法
    iOS核心动画详解(CABasicAnimation)
    iOS核心动画详解(一)
    iOS 微信支付流程详解
    初探runtime
    iOS之block,一点小心得
    iOS scrollview循环播放加缩放
    用程序删除工程中多余的图片
  • 原文地址:https://www.cnblogs.com/wo1ow1ow1/p/11100838.html
Copyright © 2020-2023  润新知