前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给 Vue 模态框组件添加过渡和动画效果

给 Vue 模态框组件添加过渡和动画效果

作者头像
学院君
发布2023-03-03 14:04:04
1.2K0
发布2023-03-03 14:04:04
举报
文章被收录于专栏:学院君的专栏学院君的专栏

既然我们可以完全掌控模态框的打开和关闭了,不如给它加点过渡/动画效果,让用户体验更好一些,Vue 框架官方提供了组件渲染/隐藏的过渡/动画效果机制,只需要参照官方文档照猫画虎调整组件代码就好了。

一、过渡效果

淡入淡出

最简单的过渡效果就是 fade,这个和 Bootstrap 组件使用的模态框打开过渡效果是一样的,只需要在模态框外面套上 Vue 内置的 transition 组件即可,并将 name 属性设置为 fade,这是一种淡入淡出效果,对应的样式代码在 style 中设置:

代码语言:javascript
复制
<style scoped>
...
.fade-enter-active, .fade-leave-active {
    transition: opacity 1s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
    opacity: 0;
}
</style>

<template>
    <div class="modal-section">
        <transition name="fade">
            <!-- Modal -->
            <div class="confirm-modal" v-show="showModal">
                ...
            </div>
        </transition>
        <div class="confirm-modal-backdrop" v-show="showModal"></div>
    </div>
</template>

此外,为了避免蒙层容器 div[class=confirm-modal-backdrop] 对动画效果的影响,我们将其放置到和 transition 组件同级的位置。

注:这里我们仅仅使用了 Vue 官方文档提供的过渡样式示例代码,其实可以通过更多样式进行更细腻的设置,官方文档有详细介绍,这里就不具体展开了:过渡的类名。

左右滑动

除了淡入淡出外,还可以通过左右滑动的方式设置过渡效果,对应的过渡效果名称是 slide-fade,将 transition 组件的 name 属性名调整为 slide-fade,再修改过渡样式代码如下:

代码语言:javascript
复制
<style scoped>
...
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-fade-enter-active {
    transition: all .3s ease;
}
.slide-fade-leave-active {
    transition: all .8s;
}
.slide-fade-enter, .slide-fade-leave-to
    /* .slide-fade-leave-active for below version 2.1.8 */ {
    transform: translateX(10px);
    opacity: 0;
}
</style>

<template>
    <div class="modal-section">
        <transition name="slide-fade">
            <!-- Modal -->
            <div class="confirm-modal" v-show="showModal">
                ...
            </div>
        </transition>
        <div class="confirm-modal-backdrop" v-show="showModal"></div>
    </div>
</template>

二、‍‍动画效果

放大缩小

除了上述过渡效果,还可以设置动画效果,以 Vue 官方文档提供的 bounce 为例(这是一种放大缩小的动画效果,即以渐次放大的方式打开模态框,以渐次缩小的方式关闭模态框) ,调整 ConfirmModal 组件代码如下:

代码语言:javascript
复制
<style scoped>
...
.bounce-enter-active {
    animation: bounce-in .5s;
}
.bounce-leave-active {
    animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
    0% {
        transform: scale(0);
    }
    50% {
        transform: scale(1.5);
    }
    100% {
        transform: scale(1);
    }
}
</style>

<template>
    <div class="modal-section">
        <transition name="bounce">
            <!-- Modal -->
            <div class="confirm-modal" v-show="showModal">
                ...
            </div>
        </transition>
        <div class="confirm-modal-backdrop" v-show="showModal"></div>
    </div>
</template>

三、‍自定义过渡/动画效果

当然,除了 Vue 框架官方提供上面几种示例之外,你还可以自定义过渡/动画效果,只需要设置相应的 transition 组件 name 属性值,然后在样式代码中组合 name 属性值和过渡/动画类名编写对应的样式代码就好了:自定义过渡类名,设置还可以集成第三方动画库(比如 Animate.css)实现更酷炫的效果,感兴趣的可以自己去试试,这里不详细介绍了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客书房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、过渡效果
    • 淡入淡出
      • 左右滑动
      • 二、‍‍动画效果
        • 放大缩小
        • 三、‍自定义过渡/动画效果
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档