vue.js动画中的js钩子函数的实现


Posted in Javascript onJuly 06, 2018

在transition中还可以通过设置javascript钩子函数,实现自定义动画效果。

以实现击球效果为例:

vue.js动画中的js钩子函数的实现

击球

代码解析:

<!-- 定义js的钩子函数 -->
<transition
  @before-enter="beforeEnter"
  @enter="enter"
  @after-enter="afterEnter"
>
  <img v-show="flag" class="ball" :src="ball" alt="" width="30">
</transition>
let vm = new Vue({
  el: "#app",
  data: {
    flag: false,
    ball: 'https://upload-images.jianshu.io/upload_images/1864602-ec73f549171a6601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240'
  },
  methods: {
    // el 表示要执行动画的那个DOM元素, 是原生的 js DOM 对象
    beforeEnter(el) {
      // 设置动画开始之前的初始位置
      el.style.transform = "translate(0, 0)"
    },
    enter(el, done) {
      // 刷新动画效果
      el.offsetWidth;
      // 动画完成后的样式
      el.style.transform = "translate(550px, 350px)";
      // 动画的持续时间
      el.style.transition = "all 3s ease";
      // done 其实是 afterEnter() 的引用
      done();
    },
    afterEnter(el) {
      // 动画完成之后调用
      this.flag = !this.flag
    }
  }
})

完整代码

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<style>
  .container {
    margin-top: 2%;
  }
  img.ball {
    margin-left: 3%;
  }
</style>
<body>
<div class="container">
  <div id="app">
    <button class="btn btn-danger" @click="flag=!flag">击球</button>
    <!-- 定义js的钩子函数 -->
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @after-enter="afterEnter"
    >
      <img v-show="flag" class="ball" :src="ball" alt="" width="30">
    </transition>
  </div>
</div>
<script>
  let vm = new Vue({
    el: "#app",
    data: {
      flag: false,
      ball: 'https://upload-images.jianshu.io/upload_images/1864602-ec73f549171a6601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240'
    },
    methods: {
      // el 表示要执行动画的那个DOM元素, 是原生的 js DOM 对象
      beforeEnter(el) {
        // 设置动画开始之前的初始位置
        el.style.transform = "translate(0, 0)"
      },
      enter(el, done) {
        // 刷新动画效果
        el.offsetWidth;
        // 动画完成后的样式
        el.style.transform = "translate(550px, 350px)";
        // 动画的持续时间
        el.style.transition = "all 3s ease";
        // done 其实是 afterEnter() 的引用
        done();
      },
      afterEnter(el) {
        // 动画完成之后调用
        this.flag = !this.flag
      }
    }
  })
</script>
</body>
</html>

最终效果:

vue.js动画中的js钩子函数的实现

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

Javascript 相关文章推荐
js获取提交的字符串的字节数
Feb 09 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
js监听键盘事件示例代码
Jul 26 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
基于jQuery实现滚动刷新效果
Jan 09 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
Mar 25 Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 Javascript
Vue和Flask通信的实现
May 19 Vue.js
老生常谈JS中的继承及实现代码
Jul 06 #Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 #Javascript
vue.js计算属性computed用法实例分析
Jul 06 #Javascript
vue.js实现的绑定class操作示例
Jul 06 #Javascript
vue.js实现插入数值与表达式的方法分析
Jul 06 #Javascript
详解浏览器缓存和webpack缓存配置
Jul 06 #Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 #Javascript
You might like
php常用Stream函数集介绍
2013/06/24 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
python为什么要安装到c盘
2020/07/20 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
回门宴答谢词
2014/01/13 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
美德好少年事迹材料
2014/01/19 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书