Vue学习:动画与过度(在插入、更新移除DOM元素,合适的时候给元素添加样式类名)

按钮往左边往右边显示隐藏

v-show显示隐藏

    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
            <h1 v-show="isShow">你好啊!</h1>
    </div>
    export default {
        name:'Test',
        data() {
            return {
                isShow:true
            }
        },
    }

但是是直接显示隐藏,需要动画效果(显示+隐藏是反向——直接反转就有了)

直接使用class:——点击事件动态添加,进行判断

<template>
    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
            <h1 v-show="isShow" class="come">你好啊!</h1>
    </div>
</template>

.come{
        animation:animate 1s;
    }
    .go{
        animation:animate 1s reverse;
    }
    @keyframes animate {
        from{
            transform: translateX(-100%);/* 左边很远处 */
        }
        to{
            transform: translateX(0px);
        }
    }

使用VUE实现动画

transition:包裹你想要实现动画的对象():——————在浏览器中会被去掉

.v-enter-active:进入时候准备的动画

.v-leave-active:离开时候准备的动画

    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition>
            <h1 v-show="isShow">你好啊!</h1>
        </transition>
    </div>

.v-enter-active{
        animation: animate 0.5s linear;
    }

    .v-leave-active{
        animation: animate 0.5s linear reverse;
    }
@keyframes animate {
        from{
            transform: translateX(-100%);/* 左边很远处 */
        }
        to{
            transform: translateX(0px);
        }
    }

可以给取名字 取名字之后需要给后面的动画效果添加name

<transition name="hello">
            <h1 v-show="isShow">你好啊!</h1>
        </transition>
  .hello-enter-active{
        animation: animate 0.5s linear;
    }

    .hello-leave-active{
        animation: animate 0.5s linear reverse;
    }

当一进场就有效果:appear属性为真 appear:true 不成立,true是字符串 :appear="true"

可以省略

<template>
    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition name="hello" appear>
            <h1 v-show="isShow">你好啊!</h1>
        </transition>
    </div>
</template>
 h1{
        background-color: orange;
    }

    .hello-enter-active{
        animation: animate 0.5s linear;
    }

    .hello-leave-active{
        animation: animate 0.5s linear reverse;
    }
    @keyframes animate {
        from{
            transform: translateX(-100%);/* 左边很远处 */
        }
        to{
            transform: translateX(0px);
        }
    }

使用过度实现:

Vue对一个物体的出现与消失各个+了3个类:

.hello-enter(进入起点).hello-enter-active(进入过程),.hello-enter-to(进入终点)

.hello-leave (离开的起点) .hello-leave-active(离开过程) .hello-leave-to (离开的终点)

进入的起点=离开的终点 离开的起点-进入的终点

<template>
    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition name="hello" appear>
            <h1 v-show="isShow">你好啊!</h1>
        </transition>
    </div>
</template>

h1{
        background-color: orange;
         transition: 0.5s linear;//过度效果
  }

/* 进入的起点、离开的终点 */
    .hello-enter,.hello-leave-to{
        transform: translateX(-100%);
    }
    /* 进入的终点、()) */
    .hello-enter-to,.hello-leave{
        transform: translateX(0);
    }

优化:过度效果

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);
    }

实现 多个元素共同过度效果

transition标签里面的元素只能有一个,所以使用 transition-group,且每个元素都要有唯一的key值

<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>

你也可以使用一个元素包裹,但是无法实现互斥的效果

<template>
    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition name="hello" appear>
            <div v-show="!isShow">
            <h1>你好啊!</h1>
            <h1>尚硅谷!</h1>
        </div>
        </transition>
    </div>
</template>

集成第三方样式库:animate.css

安装库

npm install animate.css

import引入

    import 'animate.css'

.enter-active-class进入的动画 leave-active-class 离开的动画

<template>
    <div>
        <button @click="isShow = !isShow">显示/隐藏</button>
        <transition-group 
            appear
            name="animate__animated animate__bounce" 
            enter-active-class="animate__swing"
            leave-active-class="animate__backOutUp"
        >
            <h1 v-show="!isShow" key="1">你好啊!</h1>
            <h1 v-show="isShow" key="2">尚硅谷!</h1>
        </transition-group>
    </div>
</template>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Vue.js 有内置的实现元素逐渐淡出效果的方法,可以通过 Vue.js 提供的过渡动画来实现。 Vue.js 提供了 `<transition>` 组件,它可以将元素插入更新移除时自动应用过渡效果。在这个过程中,Vue.js 会自动为元素添加一些 CSS 类名,可以通过这些类名来实现过渡效果。 下面是一个简单的例子,展示了如何使用 `<transition>` 组件来实现元素逐渐淡出的效果: ```html <template> <div> <button @click="removeItem">移除元素</button> <transition name="fade"> <div v-if="showItem" class="item">这是要移除元素</div> </transition> </div> </template> <script> export default { data() { return { showItem: true }; }, methods: { removeItem() { this.showItem = false; } } }; </script> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } .item { background-color: #ccc; padding: 20px; margin-top: 20px; border-radius: 10px; } </style> ``` 在这个例子中,我们使用了 `<transition>` 组件来包裹一个要移除元素。当点击移除元素的按钮时,我们将 `showItem` 属性设置为 `false`,这个元素就会从 DOM移除。 同时,我们在 `<transition>` 组件上设置了 `name="fade"` 属性,表示使用名为 `fade` 的 CSS 类名来实现过渡效果。在 CSS 样式中,我们定义了 `.fade-enter-active`、`.fade-leave-active`、`.fade-enter`、`.fade-leave-to` 四个类名,分别表示过渡开始时、过渡结束时、进入过渡状态时、离开过渡状态时的样式。 当元素进入过渡状态时,Vue.js 会自动为这个元素添加 `.fade-enter`、`.fade-enter-active` 类名,这时候我们可以通过 CSS 样式来实现元素逐渐淡入的效果。当元素离开过渡状态时,Vue.js 会自动为这个元素添加 `.fade-leave-to`、`.fade-leave-active` 类名,这时候我们可以通过 CSS 样式来实现元素逐渐淡出的效果。 这个特性实现了 Vue.js 的过渡动画特性,可以帮助我们快速、方便地实现元素的过渡效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值