【学习前端第六十四课】vue过渡动画的使用

本文详细介绍了如何在Vue中使用过渡动画,包括基本的v-show配合transition组件实现元素显示隐藏效果,以及如何配置不同状态的过渡效果,如淡入淡出、平移等,以及如何在多个元素上同时执行动画。
摘要由CSDN通过智能技术生成

vue过渡动画的使用

vue过渡动画transition
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width:200px;
            height:200px;
            background:red;
        }
    </style>
</head>
<body>
   <div id="app">
    <button type="button" @click="isShow=!isShow">切换</button>
    <div class="box" v-show="isShow"></div>
   </div> 
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            isShow:true
        }
    })
</script>
</html>

代码分析:

在上面的代码当中,我们通过改变isShow的值,从而控制box的显示与隐藏,那么,如恶化让盒子在显示隐藏的过程中执行特殊效果

在vue内部是可以直接设置的,vue内部自带动画管理机制,在vue的内部是可以直接执行过渡效果的,它内部封装了一个叫做 transition 组件,可以让元素在 进入 / 离开 的时候执行特定的过渡效果

<transition>
    <div class="box" v-show="isShow"></div>
</transition> 

上面的代码里面,我们用transition组件包裹了box,但是还是没有看到效果,因为我们还没有进行相关的transition配置

box现在是需要显示隐藏的,所以我们可以看作盒子的显示隐藏分为4个状态,2个阶段

1、隐藏前

2、隐藏后

3、显示前

4、显示后

然后我们根据上面的4种状态来给样式,从而对过渡效果的动画进行配置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width:200px;
            height:200px;
            background:red;
        }
        /*隐藏前*/
        .fade-leave{
            opacity: 1;
        }
        /*隐藏后*/
        .fade-leave-to{
            opacity: 0;
        }
        /*显示前*/
        .fade-enter{
            opacity: 0;
        }
        /*显示后*/
        .fade-enter-to{
            opacity: 1;
        }
        /*显示过程*/
        .fade-enter-active{
            transition: all 1s linear;
        }
        /*隐藏过程*/
        .fade-leave-active{
            transition: all 1s linear;
        }
    </style>
</head>
<body>
   <div id="app">
    <button type="button" @click="isShow=!isShow">切换</button>
    <transition name="fade">
        <div class="box" v-show="isShow"></div>
    </transition>    
   </div> 
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            isShow:true
        }
    })
</script>
</html>

代码分析:

在vue动画种,我们通过固定的类名,来给需要添加过渡动画的组件,赋予以上我们讲的4种状态下的样式

1、v-enter 代表进入之前

2、v-enter-to 代表进入之后

3、v-leave 代表离开之前

4、v-leave-to 代表离开之后

上面是4种状态下的样式设置时使用的类名

两种切换的过程

1、v-enter-active 进入的过程

2、v-leave-active 离开的过程

上面所有的类名v的部分是根据你设置transition组件的name属性来决定

上面的样式代码可以做进一步简化,因为我们设置的很多状态下的样式是一样的

.fade-leave,.fade-enter-to{
    opacity: 1;
}
.fade-leave-to,.fade-enter{
    opacity: 0;
}
.fade-enter-active,.fade-leave-active{
    transition: all 1s linear;
}

多个元素同时执行过渡动画

如果说要在多个元素上面执行过渡动画,需要使用 transition-group

transition-group默认情况下会帮我们生成一个span标签,我们可以通过tag属性来设置生成指定的标签

transition案例

我们现在使用transition来完成一组左右切换的过程,这个过程后期象中会用在页面切换上面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .img-box{
            width:500px;
            height:200px;
            border:solid 1px #000;
            position: relative;
            overflow: hidden;
        }
        .img-box>img{
            width:480px;
            height:180px;
            position: absolute;
            left:0;
            top:0;
        }
        .img-box>img:nth-of-type(1){
            border:solid 10px red;
        }
        .img-box>img:nth-of-type(2){
            border:solid 10px blue;
        }
        .img-box>img:nth-of-type(3){
            border:solid 10px green;
        }
        .img-box>img:nth-of-type(4){
            border:solid 10px orange;
        }

        /*向左移动效果组*/
        .slide-left-enter{
            transform: translateX(100%);
        }
        .slide-left-enter-to,.slide-left-leave{
            transform: translateX(0);
        }
        .slide-left-leave-to{
            transform: translateX(-100%);
        }
        .slide-left-enter-active,.slide-left-leave-active{
            transition: all .5s linear;
        }

        /*向右移动效果组*/
        .slide-right-enter{
            transform: translateX(-100%);
        }
        .slide-right-enter-to,.slide-right-leave{
            transform: translateX(0);
        }
        .slide-right-leave-to{
            transform: translateX(100%);
        }
        .slide-right-enter-active,.slide-right-leave-active{
            transition: all .5s linear;
        }
    </style>
</head>
<body>
    <div id="app">
        <transition-group :name="dir" tag="div" class="img-box">
            <img v-for="(item,index) in imgList" :src="item" :key="index" v-show="currentIndex==index" alt="">
            <!-- 
                <img src="./img/item1.jpg" v-show="currentIndex==0" alt="" >
                <img src="./img/item2.jpg" v-show="currentIndex==1" alt="" >
                <img src="./img/item3.jpg" v-show="currentIndex==2" alt="" >
                <img src="./img/item4.jpg" v-show="currentIndex==3" alt="" >
             -->
        </transition-group>
        <button type="button" @click="dir='slide-left';currentIndex--"></button>
        <button type="button" @click="dir='slide-right';currentIndex++"></button>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            currentIndex:0,
            imgList:[
                "./img/item1.jpg",
                "./img/item2.jpg",
                "./img/item3.jpg",
                "./img/item4.jpg"
            ],
            dir:"slide-left"
        },
        watch:{
            currentIndex(newValue,oldValue){
                if(newValue > 3){
                    this.currentIndex = 0;
                }else if(newValue < 0){
                    this.currentIndex = 3;
                }
            }
        }
    })
</script>
</html>
  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值