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 相关文章推荐
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
Aug 31 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
实现Vue的markdown文档可以在线运行的方法示例
Dec 11 Javascript
浅谈js中的bind
Mar 18 Javascript
webpack proxy 使用(代理的使用)
Jan 10 Javascript
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 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查询域名状态whois的类
2006/11/25 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python logging模块的使用总结
2019/07/09 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
门卫人员岗位职责
2013/12/24 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
研究生导师推荐信
2015/03/25 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
导游词之临安白水涧
2019/11/05 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
Go语言应该什么情况使用指针
2021/07/25 Golang
css弧边选项卡的项目实践
2023/05/07 HTML / CSS