zoukankan      html  css  js  c++  java
  • Vue学习之动画小结(六)

    一、Vue中实现动画的方式:https://cn.vuejs.org/v2/guide/transitions.html

    Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。
    包括以下工具:

    • 在 CSS 过渡和动画中自动应用 class
    • 可以配合使用第三方 CSS 动画库,如 Animate.css
    • 在过渡钩子函数中使用 JavaScript 直接操作 DOM
    • 可以配合使用第三方 JavaScript 动画库,如 Velocity.js

     二、使用过渡类名实现动画:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta
          name="viewport"
          content="width=
        , initial-scale=1.0"
        />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>donghua</title>
        <link rel="stylesheet" href="./lib/animate.css" />
        <style>
          /* 2.自定义两组样式,来控制 transition 内部的元素实现动画 */
          /* v-enter【这是一个时间点】是进入之前,元素的起始状态,此时还没有开始进入 */
          /* v-leave-to 【这是一个时间点】 是动画离开之后,离开的终止状态,此时,元素 动画已经结束了*/
          .v-enter,
          .v-leave-to {
            opacity: 0;
            /* 沿着X轴 */
            /* transform: translateX(150px); */
            /* 沿着Y轴 */
            transform: translateY(150px);
          }
          /*v-enter-active【入场动画的时间段】  */
          /* v-leave-active【离场动画的时间段】 */
    
          .v-enter-active,
          .v-leave-active {
            transition: all 0.8s ease;
          }
        </style>
      </head>
    
      <body>
        <script src="./lib/vue.js"></script>
        <div id="app">
          <input type="button" value="toggle" @click="flag=!flag" />
          <!-- 需求:点击按钮,让H3显示,再点击,让H3隐藏 -->
          <!-- 1、使用 transition 元素,把需要被动画控制的元素,包裹起来 -->
          <transition>
            <h3 v-if="flag">这是一个H3</h3>
          </transition>
        </div>
    
        <script>
          var vm = new Vue({
            el: "#app",
            data: {
              flag: false
            }
          });
        </script>
      </body>
    </html>

    三、使用animate.css类实现动画:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta
          name="viewport"
          content="width=
        , initial-scale=1.0"
        />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>donghua</title>
        <link rel="stylesheet" href="./lib/animate.css" />
      </head>
    
      <body>
        <script src="./lib/vue.js"></script>
        <div id="app">
          <input type="button" value="toggle" @click="flag=!flag" />
          <!-- 使用 :duration="{ enter :200, leave: 400}"来分别设置 入场的时长和 离场的时长  -->
          <transition
            enter-active-class="bounceIn"
            leave-active-class="bounceOut"
            :duration="{ enter :200, leave: 400}"
          >
            <h3 v-if="flag" class="animated">这是一个H3</h3>
          </transition>
        </div>
    
        <script>
          var vm = new Vue({
            el: "#app",
            data: {
              flag: false
            }
          });
        </script>
      </body>
    </html>

     四、使用钩子函数:

    可以在属性中声明 JavaScript 钩子

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <title>donghua</title>
        <style>
          /* 定义动画小球 */
          .ball {
            width: 15px;
            height: 15px;
            border-radius: 50%;
            background-color: red;
          }
        </style>
      </head>
    
      <body>
        <script src="./lib/vue.js"></script>
        <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>
          var vm = new Vue({
            el: "#app",
            data: {
              flag: false
            },
            methods: {
              //动画钩子函数的第一个参数:el,表示 要执行动画的那个DOM元素,是个原生的JS DOM对象
              //大家可以认为,el是通过docunment.getElementById('')方式获取到的原生JS DOM对象
              beforeEnter(el) {
                //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");
                //这句话,第一个功能就是控制小球的显示与隐藏;
                //第二个功能:直接跳过后半场动画,让flag 标识符 直接变为 false;
                //当第二次再点击 按钮的时候,flag: false---> true
    
                this.flag = !this.flag;
                //Vue把一个完整的动画,使用钩子函数,拆分为了两部分:
                //我们使用flag 标识符,来表示动画的切换flag: false--> true -->false
              }
            }
          });
        </script>
      </body>
    </html>
    <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>
  • 相关阅读:
    Oracle架构实现原理、含五大进程解析(图文详解)
    Oracle架构实现原理、含五大进程解析(图文详解)
    mysqldump --flush-logs
    mysql dump 参数
    Windows 8.1 PLSQL_32连接到RHEL6.1 Oracle10gr2_64
    Windows 8.1 PLSQL_32连接到RHEL6.1 Oracle10gr2_64
    echarts-单柱状图
    echarts-all.js:1 Dom’s width & height should be ready before init.
    如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断。
    mysql 创建函数 error Code: 1227. Access denied;
  • 原文地址:https://www.cnblogs.com/21-forever/p/11107351.html
Copyright © 2011-2022 走看看