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 相关文章推荐
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
jQuery中的select操作详解
Nov 29 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
详解js静态检查工具eslint配置文件
Nov 23 Javascript
php结合js实现多条件组合查询
May 28 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 Javascript
Vue-axios-post数据后端接不到问题解决
Jan 09 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
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
杏林同学录(六)
2006/10/09 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHP积分兑换接口实例
2015/02/09 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
js实现秒表计时器
2019/12/16 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
Python实现将xml导入至excel
2015/11/20 Python
kali中python版本的切换方法
2019/07/11 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
个人函授自我鉴定
2014/03/25 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers