千家信息网

怎么利用vue实现css过渡和动画

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"怎么利用vue实现css过渡和动画",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利用vue实现css过渡和动画"吧!一、过渡和
千家信息网最后更新 2026年11月01日怎么利用vue实现css过渡和动画

这篇文章主要讲解了"怎么利用vue实现css过渡和动画",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利用vue实现css过渡和动画"吧!

    一、过渡和动画的区别

    过渡:通常用来表示元素上属性状态的变化。

    动画:通常用来表示元素运动的情况。

    二、使用Vue实现基础得css过渡与动画

    1. 动画

    /* css */@keyframes leftToRight {    0% {        transform: translateX(-100px);    }    50% {        transform: translateX(-50px);    }    100% {        transform: translateX(0);    }}.animation {    animation: leftToRight 3s;}
    // jsconst app = Vue.createApp({    data() {        return {            animate: {                animation: true            }        }    },    methods: {        handleClick(){            this.animate.animation = !this.animate.animation        }    },    template: `        
    hello
    `});

    2. 过渡

    /* css */.transition {    transition: background-color 3s linear 0s;} .gold {    background-color: gold;} .cyan {    background-color: cyan;}
    // jsconst app = Vue.createApp({    data() {        return {            animate: {                transition: true,                gold: true,                cyan: false            }        }    },    methods: {        handleClick() {            this.animate.gold = !this.animate.gold;            this.animate.cyan = !this.animate.cyan;        }    },    template: `        
    hello
    `});

    以上是通过设置class属性实现的,同样通过设置style属性也可以实现:

    /* css */.transition {    transition: background-color 3s linear 0s;}
    // jsdata() {    return {        transition: 'transition',        styleObject: {            backgroundColor: 'gold'        }    }},methods: {    handleClick() {        if(this.styleObject.backgroundColor === 'gold'){            this.styleObject.backgroundColor = 'cyan';        }else{            this.styleObject.backgroundColor = 'gold';        }    }},template: `    
    hello
    `

    三、使用transition标签实现单元素/组件的过渡和动画效果

    1. transition 的基本介绍

    • 元素作为单个元素/组件的过渡效果。

    • 只会把过渡效果应用到其包裹的内容上,而不会额外渲染 DOM 元素,也不会出现在可被检查的组件层级中。

    2. transition 的过渡class

    在进入/离开的过渡中,会有 6 个 class 切换:

    • v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

    • v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

    • v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。

    • v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

    • v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

    • v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被删除),在过渡/动画完成之后移除。

    3. 过渡示例

    将需要过渡的元素使用transition标签包裹。设置过渡需要的class,可从以上六种class中选择。

    /* css *//* .v-enter-from {    opacity: 0;}.v-enter-active {    transition: opacity 1s ease;}.v-enter-to {    opacity: 1;}.v-leave-from {    opacity: 1;}.v-leave-active {    transition: opacity 1s ease;}.v-leave-to {    opacity: 0;} *//* 简写 */.v-enter-from, .v-leave-to{    opacity: 0;}.v-enter-active, .v-leave-active{    transition: opacity 1s ease;}
    // jsconst app = Vue.createApp({    data() {        return {            show: true        }    },    methods: {        handleClick() {            this.show = !this.show;        }    },    template: `                    
    hello
    `});

    4. 动画示例

    使用动画效果只需要修改css部分,js部分功能不变。

    /* css */@keyframes shake-in {    0% {        transform: translateX(-50px);    }    50% {        transform: translateX(50px);    }    100% {        transform: translateX(0px);    }}@keyframes shake-out {    0% {        transform: translateX(50px);    }    50% {        transform: translateX(-50px);    }    100% {        transform: translateX(0px);    }}.v-enter-active{    animation: shake-in 1s ease-in;}.v-leave-active{    animation: shake-out 1s ease-in-out;}

    5. transition的name属性

    • name - string :用于自动生成 CSS 过渡类名,不写默认是v。

    • name设置为hy,对应的class名称也要改为hy开头。

    • // js    
      hello
    /* css */.hy-enter-from, .hy-leave-to{    opacity: 0;}.hy-enter-active, .hy-leave-active{    transition: opacity 1s ease;}

    6. 自定义过渡类名

    我们可以通过以下 attribute 来自定义过渡类名:

    • enter-from-class

    • enter-active-class

    • enter-to-class

    • leave-from-class

    • leave-active-class

    • leave-to-class

    他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css. 结合使用十分有用。

    // 首先引入样式文件 const app = Vue.createApp({    data() {        return {            show: true        }    },    methods: {        handleClick() {            this.show = !this.show;        }    },    // 以自定义过渡类名的方式去添加动画样式    template: `                    
    hello
    `});

    7. 同时设置过渡和动画

    • 在一些场景中,你需要给同一个元素同时设置过渡和动画,比如 animation 很快的被触发并完成了,而 transition 效果还没结束。

    • 在这种情况中,你就需要使用 type attribute 并设置 animation 或 transition 来明确声明你需要 Vue 监听的类型。

    • type - string。指定过渡事件类型,侦听过渡何时结束。有效值为 "transition" 和 "animation"。默认 Vue.js 将自动检测出持续时间长的为过渡事件类型。

    在transition时间更长时,使用type='transiton'的效果:

    可以发现animation先完成,但transition并没有终止会一致执行完,元素才消失。

    /* css */@keyframes shake-in {    0% {        transform: translateX(-50px);    }     50% {        transform: translateX(50px);    }     100% {        transform: translateX(0px);    }} @keyframes shake-out {    0% {        transform: translateX(50px);    }     50% {        transform: translateX(-50px);    }     100% {        transform: translateX(0px);    }} .v-enter-from,.v-leave-to {    color: red;} .v-enter-active {    animation: shake-in 1s ease-in;    transition: color 3s ease-in;} .v-enter-to, .v-leave-from {    color: green;} .v-leave-active {    animation: shake-out 1s ease-in-out;    transition: color 3s ease-in-out;}
    // jsconst app = Vue.createApp({    data() {        return {            show: true        }    },    methods: {        handleClick() {            this.show = !this.show;        }    },    template: `                    
    hello
    `});

    在transition时间更长时,使用type='animation'的效果:

    • 可以发现animation完成后,transition也会立即终止,元素也消失了。

        
    hello

    8. duration 属性

    • duration - number | { enter: number, leave: number }:指定过渡的持续时间。

    • 比css中设置的时间优先级更高。

    • 单位是:ms。

        
    hello

    你也可以定制进入和移出的持续时间:

        
    hello

    9. 使用js实现动画

    • 当只用 JavaScript 过渡的时候,在 enter 和 leave 钩中必须使用 done 进行回调。否则,它们将被同步调用,过渡会立即完成。

    • 添加 :css="false",也会让 Vue 会跳过 CSS 的检测,除了性能略高之外,这可以避免过渡过程中 CSS 规则的影响。

    想要用js实现动画,可以在transition的 attribute 中声明 JavaScript 钩子:

    @before-enter="beforeEnter"进入过渡前
    @enter="enter"进入过渡时
    @after-enter="afterEnter"进入过渡后
    @enter-cancelled="enterCancelled"进入过渡被打断时
    @before-leave="beforeLeave"离开过渡前
    @leave="leave"离开过渡时
    @after-leave="afterLeave"离开过渡后
    @leave-cancelled="leaveCancelled"离开过渡被打断时
    const app = Vue.createApp({    data() {        return {            show: true        }    },    methods: {        handleClick() {            this.show = !this.show;        },        handleBeforeEnter(el){            el.style.color = 'red';        },        handleEnter(el, done){            const timer = setInterval(()=>{                if(el.style.color === 'red'){                    el.style.color = 'blue';                }else{                    el.style.color = 'red';                }            }, 1000);            setTimeout(()=>{                clearInterval(timer);                // 动画结束标志                // 不执行done()的话,handleAfterEnter不会执行                done();            }, 3000)        },        handleAfterEnter(el){            console.log('success');;        }    },    template: `                    
    hello
    `});

    // jsconst app = Vue.createApp({    components: ['item-a', 'item-b'],    data() {        return {            component: 'item-a'        }    },    methods: {        handleClick() {            if (this.component === 'item-a') {                this.component = 'item-b';            } else {                this.component = 'item-a';            }        }    },    template: `                                        `});app.component('item-a', {    template: `
    hello
    `});app.component('item-b', { template: `
    bye
    `});

    四、组件和元素切换动画的实现

    • mode - string 控制离开/进入过渡的时间序列。

    • 有效的模式有 先出后进: "out-in" 和 先进后出:"in-out";默认同时进行。

    • 可以通过 appear attribute 设置节点在初始渲染的过渡。

    /* css */.v-enter-from,.v-leave-to {    opacity: 0;} .v-enter-active,.v-leave-active {    transition: opacity 1s ease-in;} .v-enter-to,.v-leave-from {    opacity: 1;}
    // jsconst app = Vue.createApp({    components: ['item-a', 'item-b'],    data() {        return {            component: 'item-a'        }    },    methods: {        handleClick() {            if (this.component === 'item-a') {                this.component = 'item-b';            } else {                this.component = 'item-a';            }        }    },    template: `                                        `});app.component('item-a', {    template: `
    hello
    `});app.component('item-b', { template: `
    bye
    `});

    五、列表动画

    • 使用 组件,可以同时渲染整个列表。

    • 内部元素总是需要提供唯一的 key attribute 值。

    • CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身。

    • 组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。要使用这个新功能只需使用新增的 v-move 类。

    /* css */.inline-block {    display: inline-block;    margin-right: 10px;} .v-enter-from,.v-leave-to {    opacity: 0;    transform: translateY(30px);} .v-enter-active {    transition: all 1s ease;} .v-leave-active {    position: absolute;} .v-move {    transition: all 1s ease;}

    六、状态动画

    对于数据元素本身而言,通过数字和运算、颜色的显示、SVG 节点的位置、元素的大小和其他的 property 这些属性的变化,同样可以实现动画的效果。

    数字变化示例:

    const app = Vue.createApp({    data() {        return {            number: 1        }    },    methods: {        handleClick() {            const timer = setInterval(() => {                if (this.number >= 10) {                    clearInterval(timer)                }else{                    this.number++;                }            }, 100);        }    },    template: `        
    {{number}}
    `});

    感谢各位的阅读,以上就是"怎么利用vue实现css过渡和动画"的内容了,经过本文的学习后,相信大家对怎么利用vue实现css过渡和动画这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    动画 元素 切换 时间 效果 状态 属性 组件 类名 同时 应用 内容 情况 示例 类型 过程 变化 学习 有效 与此同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 湖北九亚互联网络科技有限公司 广州万易互联网科技有限公司 美国互联网保险保险科技 腾讯阿里互联网科技 狮子座互联网科技 互联网与未来科技 江苏南京365互联网科技 团飞科技与伯堂互联网服务平台 重庆互联网医院沙龙医盟信息科技 中国互联网十大科技股排名 山东有哪些互联网科技公司 广东工业互联网大赛深圳学泰科技 互联网科技数字货币 2021世界互联网领先科技成果发布 广西科技产业互联网是什么 玉溪新华互联网科技怎么选 广西泛欧互联网科技有限公司 优雇互联网科技有限公司 前海云享互联网科技 互联网为科技 西安互联网科技 互联网 新科技 花神(南京)互联网科技有限公司 宜昌元轩互联网科技有限公司 卡尔迅互联网科技有限公司 互联网领先科技成果宣传视频 银川新华互联网科技学校招聘 伍佰万互联网科技是干嘛的 小牛互联网科技有限公司地址
    0