美文网首页
封装的过度与动画

封装的过度与动画

作者: 冰点雨 | 来源:发表于2022-04-11 10:39 被阅读0次

    1.作用:在插入、更新、移除 DOM 元素时,在合适的时候给元素添加样式类名
    2.写法:
    (1)准备好样式:
    v-enter:进入的起点
    v-enter-active:进入过程中
    v-enter-to:进入的终点
    v-leaver:离开的起点
    v-leaver-active:离开过程中
    v-leaver-to:离开的终点
    (2)使用<transition>包裹要过度的元素,并配置 name 属性
    <transition name="hello">
    <h1 v-show="isShow">你好啊</h1>
    </transition>
    3.备注:若有多个元素需要过度,则需要使用<transition-group>且每个元素对需要指定 key 值

    App.vue

    <template>
      <div>
        <Test />
        <Test2 />
        <Test3 />
      </div>
    </template>
    
    <script>
    import Test from './components/Test'
    import Test2 from './components/Test2'
    import Test3 from './components/Test3'
    
    export default {
      name: 'App',
      components: {
        Test,
        Test2,
        Test3,
      },
    }
    </script>
    <style></style>
    

    Test.vue

    <template>
      <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition name="hello" appear>
          <h1 v-show="isShow">你好啊</h1>
        </transition>
      </div>
    </template>
    
    <script>
    export default {
      name: 'Test',
      data() {
        return {
          isShow: true,
        }
      },
      methods: {},
    }
    </script>
    
    <style scoped>
    h1 {
      background-color: orange;
    }
    
    .hello-enter-active {
      animation: animationTest 1s linear;
    }
    
    .hello-leave-active {
      animation: animationTest 1s linear reverse;
    }
    
    @keyframes animationTest {
      from {
        transform: translateX(-100%);
      }
      to {
        transform: translateX(0px);
      }
    }
    </style>
    

    Test2.vue

    <template>
      <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition-group name="hello" appear>
          <h1 v-show="!isShow" key="1">你好啊</h1>
          <h1 v-show="isShow" key="2">我很好</h1>
        </transition-group>
      </div>
    </template>
    
    <script>
    export default {
      name: 'Test',
      data() {
        return {
          isShow: true,
        }
      },
      methods: {},
    }
    </script>
    
    <style scoped>
    h1 {
      background-color: orange;
    }
    
    /* 进入的起点、离开的终点  */
    .hello-enter,
    .hello-leave-to {
      transform: translateX(-100%);
    }
    .hello-enter-active,
    .hello-leave-active {
      transition: 0.5s linear;
    }
    /* 进入的终点、离开的起点  */
    .hello-enter-to,
    .hello-leave {
      transform: translateX(0);
    }
    </style>
    

    Test3.vue

    <template>
      <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition-group
          appear
          name="animate__animated animate__bounce"
          enter-active-class="animation-swing"
          leave-active-class="animate__backOutUp"
        >
          <h1 v-show="!isShow" key="1">你好啊</h1>
          <h1 v-show="isShow" key="2">我很好</h1>
        </transition-group>
      </div>
    </template>
    
    <script>
    import 'animation.css'
    export default {
      name: 'Test',
      data() {
        return {
          isShow: true,
        }
      },
      methods: {},
    }
    </script>
    
    <style scoped>
    h1 {
      background-color: orange;
    }
    </style>
    
    

    相关文章

      网友评论

          本文标题:封装的过度与动画

          本文链接:https://www.haomeiwen.com/subject/koyjdrtx.html