Vue 页面切换效果之 BubbleTransition(推荐)


Posted in Javascript onApril 08, 2018

Vue 页面切换效果之 BubbleTransition(推荐) 

CodePen 地址

前端使用 SPA 之后,能获得更多的控制权,比如页面切换动画,使用后端页面我们可能做不了上面的效果,或者做出来会出现明显的闪屏。因为所有资源都需要重新加载。

今天使用 vue,vue-router,animejs 来讲解如何上面的效果是如何实现的。

步骤

  1. 点击菜单,生成 Bubble,开始执行入场动画
  2. 页面跳转
  3. 执行退场动画

函数式调用组件

我希望效果是通过一个对象去调用,而不是 v-show, v-if 之类的指令,并且为了保持统一,仍然使用 Vue 来写组件。我通常会用新的 Vue 根节点来实现,让效果独立于业务组件之外。

let instance = null
function createServices (Comp) {
 // ...
 return new Vue({
 // ...
 }).$children[0]
}
function getInstance () {
 instance = instance || createServices(BubbleTransitionComponent)
 return instance
}
const BubbleTransition = {
 scaleIn: () => {
 return getInstance().animate('scaleIn')
 },
 fadeOut: () => {
 return getInstance().animate('fadeOut')
 }
}

接着实现 BubbleTransitionComponent,那么 BubbleTransition.scaleIn, BubbleTransition.scaleOut 就能正常工作了。 animejs 可以监听的动画执行结束的事件。anime().finished 获得 Promise 对象。

<template>
 <div class="transition-bubble">
 <span v-show="animating" class="bubble" id="bubble">
 </span>
 </div>
</template>
<script>
import anime from 'animejs'
export default {
 name: 'transition-bubble',
 data () {
 return {
  animating: false,
  animeObjs: []
 }
 },
 methods: {
 scaleIn (selector = '#bubble', {duration = 800, easing = 'linear'} = {}) {
  // this.animeObjs.push(anime().finished)
 },
 fadeOut (selector = '#bubble', {duration = 300, easing = 'linear'} = {}) {
  // ...
 },
 resetAnimeObjs () {
  this.animeObjs.reset()
  this.animeObjs = []
 },
 animate (action, thenReset) {
  return this[action]().then(() => {
  this.resetAnimeObjs()
  })
 }
 }
}

最初的想法是,在 router config 里面给特定路由 meta 添加标记,beforeEach 的时候判断判断该标记执行动画。但是这种做法不够灵活,改成通过 Hash 来标记,结合 Vue-router,切换时重置 hash。

<router-link class="router-link" to="/#__bubble__transition__">Home</router-link>
const BUBBLE_TRANSITION_IDENTIFIER = '__bubble__transition__'
router.beforeEach((to, from, next) => {
 if (to.hash.indexOf(BUBBLE_TRANSITION_IDENTIFIER) > 0) {
 const redirectTo = Object.assign({}, to)
 redirectTo.hash = ''
 BubbleTransition.scaleIn()
  .then(() => next(redirectTo))
 } else {
 next()
 }
})
router.afterEach((to, from) => {
 BubbleTransition.fadeOut()
})

酷炫的动画能在一瞬间抓住用户的眼球,我自己也经常在逛一些网站的时候发出,wocao,太酷了!!!的感叹。可能最终的实现用不了几行代码,自己多动手实现一下,下次设计师提出不合理的动画需求时可以装逼,这种效果我分分钟能做出来,但是我认为这里不应该使用 ** 动画,不符合用户的心理预期啊。

CodePen 地址

总结

以上所述是小编给大家介绍的Vue 页面切换效果之 BubbleTransition(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jQuery中after()方法用法实例
Dec 25 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
深入理解JQuery循环绑定事件
Jun 02 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 Javascript
node文字生成图片的示例代码
Oct 26 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 Javascript
微信小程序如何播放腾讯视频的实现
Sep 20 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 #Javascript
Js面试算法详解
Apr 08 #Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 #Javascript
详解vue表单——小白速看
Apr 08 #Javascript
JS简单实现动态添加HTML标记的方法示例
Apr 08 #Javascript
React Router v4 入坑指南(小结)
Apr 08 #Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 #Javascript
You might like
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
php 随机生成10位字符代码
2009/03/26 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
详解Django中Request对象的相关用法
2015/07/17 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python实时监控cpu小工具
2018/06/21 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
四年级数学教学反思
2014/02/02 职场文书
投资合作协议书范本
2014/04/17 职场文书
优秀家长事迹材料
2014/05/17 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
讲解MySQL增删改操作
2022/05/06 MySQL