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函数的重载
Sep 22 Javascript
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
May 19 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
JavaScript代码生成PDF文件的方法
Feb 26 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
Vue详细的入门笔记
May 10 Vue.js
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调用数据库的存贮过程
2006/10/09 PHP
php 文件上传系统手记
2009/10/26 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php生成验证码函数
2015/10/20 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python匿名函数用法实例分析
2019/08/03 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
招商经理岗位职责
2013/11/16 职场文书
乡下人家教学反思
2014/02/01 职场文书
四下基层实施方案
2014/03/28 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
应届毕业生求职信范文
2015/03/19 职场文书