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


Posted in Javascript onFebruary 13, 2019

前面学习了用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('动画结束')
    }
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript !!的作用
Dec 04 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
js给selected添加options的方法
May 06 Javascript
javascript函数式编程程序员的工具集
Oct 11 Javascript
AngularJS directive返回对象属性详解
Mar 28 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
了解ESlint和其相关操作小结
May 21 Javascript
详解express + mock让前后台并行开发
Jun 06 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 #Javascript
node.js微信小程序配置消息推送的实现
Feb 13 #Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 #Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 #jQuery
vuex实现的简单购物车功能示例
Feb 13 #Javascript
jquery无缝图片轮播组件封装
Nov 25 #jQuery
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 #Javascript
You might like
最小化数据传输――在客户端存储数据
2006/10/09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python如何给函数库增加日志功能
2020/08/04 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
业务员岗位职责范本
2013/12/15 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
团日活动总结报告
2014/06/25 职场文书
初中教师个人总结
2015/02/10 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis