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 相关文章推荐
JQuery筛选器全系列介绍
Aug 27 Javascript
纯js实现遮罩层效果原理分析
May 27 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
JavaScript必知必会(七)js对象继承
Jun 08 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 Javascript
js实现踩五彩块游戏
Feb 08 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
document.createElement()用法
2013/03/13 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JavaScript 基本概念
2015/01/20 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
express框架下使用session的方法
2019/07/31 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Python数据持久化shelve模块用法分析
2018/06/29 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
python3处理word文档实例分析
2020/12/01 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
物控部经理职务说明书
2014/02/25 职场文书
小学生综合素质评语
2014/04/23 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
我的生日感言
2015/08/03 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers