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 相关文章推荐
js 幻灯片的实现
Dec 06 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
Jul 27 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
关于自定义Egg.js的请求级别日志详解
Dec 12 Javascript
浅谈js闭包理解
Mar 28 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
Sep 17 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
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP安全上传图片的方法
2015/03/21 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
实例讲解JavaScript截取字符串
2018/11/30 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
python实现猜单词小游戏
2020/05/22 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Python 音频生成器的实现示例
2019/12/24 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
10条PHP编程习惯
2014/05/26 面试题
药学专业毕业生求职信
2013/10/20 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
门市房租房协议书
2014/12/04 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python