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 StringBuilder类实现
Dec 22 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
提升jQuery的性能需要做好七件事
Jan 11 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
推荐几个不错的console调试技巧实现
Dec 20 Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
javascript的var与let,const之间的区别详解
Feb 18 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Django卸载之后重新安装的方法
2017/03/15 Python
带你认识Django
2019/01/15 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
django框架使用方法详解
2019/07/18 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
python归并排序算法过程实例讲解
2020/11/04 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
农民工创业典型事迹
2014/01/25 职场文书
2014年度个人总结范文
2015/03/09 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书