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 multibox 全选
Mar 22 Javascript
jquery multiSelect 多选下拉框
Jul 09 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
javascript实现图片上传前台页面
Aug 18 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
JS代码触发事件代码实例
Jan 02 Javascript
vue 点击其他区域关闭自定义div操作
Jul 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学习教程之第2天
2008/06/15 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
Javascript倒计时代码
2010/08/12 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
js实现导航跟随效果
2018/11/17 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python实现简单截取中文字符串的方法
2015/06/15 Python
深入浅析python定时杀进程
2016/06/06 Python
用python生成1000个txt文件的方法
2018/10/25 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
PHP面试题及答案一
2012/06/18 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
最新自我评价范文
2013/11/16 职场文书
带病坚持工作事迹
2014/05/03 职场文书
鉴定评语大全
2014/05/05 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers