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


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Title</title>
    <script src="js/vue-2.4.0.js"></script>
    <style>
    .ball {
    15px;
    height: 15px;
    ">red;
    border-radius: 50%;
    }
    </style>
    </head>
    <body>
    <div id="app">
    <input type="button" value="加入购物车" @click="flag=!flag">
    <!--使用 transition 元素把小球包裹起来-->
    <!-- v-on:before-enter 动画开始 enter 动画执行 after-enter 动画结束 钩子函数-->
    <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
    <div class="ball" v-show="flag"></div>
    </transition>
    </div>
    <script>
    const 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
    this.flag = !this.flag
    }
    }
    });
    </script>
    </body>
    </html>
  • 相关阅读:
    js:DOM及其操作2
    js:DOM及其操作
    闭包,作用域,作用域链
    面向对象
    关于typeof
    javascript正则表达式&关键词检索
    关于StringAPI
    mybatis Invalid bound statement (not found)
    全国区域数据
    redis 问题整理
  • 原文地址:https://www.cnblogs.com/lujieting/p/10447954.html
Copyright © 2020-2023  润新知