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实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
js中获取jsp表单中radio类型的值简单实例
Aug 15 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
Mar 21 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
Aug 18 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 Javascript
150行代码带你实现微信小程序中的数据侦听
May 17 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 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
web方式ftp
2006/10/09 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
Python线程详解
2015/06/24 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
生物科学专业自荐书
2014/06/20 职场文书
小学社会实践活动总结
2014/07/03 职场文书
简历自我评价优缺点
2015/03/11 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript