Vue 中 JS 动画与 Velocity.js 的结合

时间: 2019-02-03阅读: 908标签: 动画

前面学习了用css实现动画效果,那 vue 中能不能用js实现动画效果呢?其实 vue 提供了很多动画钩子


enter

入场动画钩子函数有before-enter、enter、after-enter


before-enter

动画出现前的事件

<div id="root">
    <transition name="fade"
        @before-enter="handleBeforeEnter"       //动画出现前的事件
    >
        <div v-if="show">hello world</div>
    </transition>
    <button @click="handleClick">切换</button>
</div>
let vm = new Vue({
    el: '#root',
    data: {
        show:true
    },
    methods: {
        handleClick(){
            this.show = !this.show
        },
        handleBeforeEnter(el){          //接收一个参数 el,为 dom 元素
            el.style.color = 'red'
        }
    }
})


enter

before-enter事件结束后执行

<div id="root">
    <transition name="fade"
        @before-enter="handleBeforeEnter"
        @enter="handleEnter"       //before-enter 事件结束后执行
    >
        <div v-if="show">hello world</div>
    </transition>
    <button @click="handleClick">切换</button>
</div>
let vm = new Vue({
    el: '#root',
    data: {
        show:true
    },
    methods: {
        handleClick(){
            this.show = !this.show
        },
        handleBeforeEnter(el){
            el.style.color = 'red'
        }
        handleEnter(el,done){           //接收两个参数,第一个参数 el 为 dom 元素,第二个参数是 done 是个回调函数
            setTimeout(()=>{
                el.style.color = 'green'
                done()                 //done 回调函数非常重要,在执行完动画后需手动执行下这个函数,相当于告诉 Vue 这个动画已经执行完了,会再去调用 after-enter 事件
            },2000)
        }
    }
})


after-enter

enter事件中done被调用后,after-enter事件会被触发

<div id="root">
    <transition name="fade"
                @before-enter="handleBeforeEnter"
                @enter="handleEnter"
                @after-enter="handleAfterEnter"     //enter 事件中 done 被调用后,after-enter 事件会被触发
    >
        <div v-if="show">hello world</div>
    </transition>
    <button @click="handleClick">切换</button>
</div>
let vm = new Vue({
    el: '#root',
    data: {
        show: true
    },
    methods: {
        handleClick() {
            this.show = !this.show
        },
        handleBeforeEnter(el) {
            el.style.color = 'red'
        },
        handleEnter(el, done) {
            setTimeout(() => {
                el.style.color = 'green'
                done()
            }, 2000)
        },
        handleAfterEnter(el) {      //接收一个参数 el,为 dom 元素
            setTimeout(()=>{
                el.style.color = 'blue'
            },2000)
        }
    }
})


leave

与入场动画对应的出场动画钩子函数有before-leave、leave、after-leave。它们的用法与入场动画用法一样


Velocity.js

有了上面基础后,配合Velocity.js库,能实现更强大的动画效果。

<div id="root">
    <transition name="fade"
                @before-enter="handleBeforeEnter"
                @enter="handleEnter"
                @after-enter="handleAfterEnter"     //enter 事件中 done 被调用后,after-enter 事件会被触发
    >
        <div v-if="show">hello world</div>
    </transition>
    <button @click="handleClick">切换</button>
</div>
let vm = new Vue({
    el: '#root',
    data: {
        show: true
    },
    methods: {
        handleClick() {
            this.show = !this.show
        },
        handleBeforeEnter(el) {
            el.style.opacity = 0
        },
        handleEnter(el, done) {
            Velocity(el, {          //第一个参数是要操作的 dom 元素
                opacity: 1
            }, {
                duration: 1000,     //第三参数中需要配置一个 complete 属性,值为 done,因为 Velocity 执行完后会自动执行 complete 属性,这里设置为 done 是让它去触发 after-enter 事件
                complete: done
            })
        },
        handleAfterEnter(el) {
            console.log('动画结束')
        }
    }
})
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1996

关闭

为什么要用css动画替换js动画?

通常我们会通过频繁的操作 DOM的CSS来实现视觉上的动画效果,导致js效率低的两个因素都包括在内了在频繁的操作DOM和CSS时,浏览器会不停的执行重排和重绘,在PC版本的浏览器中,因为浏览器可用的内存比较大

用JavaScript 实现酷炫的粒子追踪动画

你是否曾经想过用花哨的、闪闪发光的粒子动画分吸引你网站用户的注意力,而同时又在后台加载一些数据呢?幸运的是,没有必要用诸如 Three.js 之类的 3D 库进行非常深入的图形编程

CSS中过渡与动画的区别有哪些?

过度是在动画基础上增加的,作用是如何实施动画,比如一个div从一个地方到另一个地方,设置时长,是匀速前进,或者从快到慢等,这种就是过渡。

css3动画添加间隔

因项目需要,需要在元素上实现动画效果,并且需要有动画间隔。坑爹的是animation-delay只有在第一次动画开始的时候才起效。在网上找了很多方法,最终的方法基本都是改动画规则

css3贝塞尔曲线(cubic-bezier)

css3 animation模块,其中animation-timing-function 和 transition-timing-function两个属性来控制动画速度分别提供了ease,liner,ease-in,ease-out

css3中动画有哪些属性?

通过CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。动画是使元素从一种样式逐渐变化为另一种样式的效果。那么在CSS中动画属性有哪些?

两张图解释CSS动画的性能

在手机上使用CSS动画时很多时候会感到卡顿,然后网上很多教程说开启GPU加速 transform: translate3d(0,0,0); 可解决,但是为什么开启GPU加速就能让动画顺滑呢?

为何 Canvas 内元素动画总是在颤抖?

在项目中我们可能对动画进行锁帧,帧率可能是 60 或者 30,如果我们想保证渲染不抖动,在匀速直线运动中,我们尽量保证我们设置的速度要是帧率的倍数,或者保证平均每帧移动的像素点是一样的

12款优秀的 jQuery 动画库

Textillate.js 是一个简单的 CSS3 文本动画插件。结合了一些非常棒的库,把 CSS3 动画轻松应用到任何文本;Lazy Line Painter 这款 jQuery 插件使用 Raphaël 库来创建路径动画 CSS3

css3动画 Transition

CSS transitions 提供了一种在更改CSS属性时控制动画速度的方法。 其可以让属性变化成为一个持续一段时间的过程,而不是立即生效的。比如,将一个元素的颜色从白色改为黑色,通常这个改变是立即生效的

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!