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 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
js 多浏览器分别判断代码
Apr 01 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
JS检测移动端横竖屏的代码
May 30 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
jquery实现百叶窗效果
Jan 12 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
angular5 子组件监听父组件传入值的变化方法
Sep 30 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
Apr 18 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
微信小程序实现页面分享onShareAppMessage
Aug 12 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 Javascript
老生常谈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连接MySQL代码的参数说明
2008/06/07 PHP
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
javascript 写类方式之一
2009/07/05 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python调用staf自动化框架的方法
2018/12/26 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
大学生创业策划书
2014/02/02 职场文书
股权转让意向书
2014/04/01 职场文书
完美的中文自荐信
2014/05/24 职场文书
停车位租赁协议书
2014/09/24 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
python 逐步回归算法
2021/04/06 Python
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers