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和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
javascript清空table表格的方法
May 14 Javascript
Node.js中的process.nextTick使用实例
Jun 25 Javascript
使用JavaScript获取URL中的参数(两种方法)
Nov 16 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
vue中的计算属性实例详解
Sep 19 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 Javascript
如何在JavaScript中正确处理变量
Dec 25 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脚本的10个技巧(7)
2006/10/09 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
webpack多页面开发实践
2017/12/18 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Django设置Postgresql的操作
2020/05/14 Python
flask开启多线程的具体方法
2020/08/02 Python
Pycharm github配置实现过程图解
2020/10/13 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
《中华少年》教学反思
2014/02/15 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
六一活动主持词
2015/06/30 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
centos8安装MongoDB的详细过程
2021/10/24 MongoDB