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 Event事件学习第一章 Event介绍
Feb 07 Javascript
document.createElement()用法
Mar 13 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
js控制浏览器全屏示例代码
Feb 20 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
javascript格式化日期时间方法汇总
Jun 19 Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
Vue 递归多级菜单的实例代码
May 05 Javascript
vue接入腾讯防水墙代码
May 07 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
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
jQuery操作css样式
2017/05/15 jQuery
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
上海期货面试题
2014/01/31 面试题
动态密码技术
2012/10/18 面试题
党员自我评价分享
2013/12/13 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
千手观音观后感
2015/06/03 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
Python实现滑雪小游戏
2021/09/25 Python
Python 正则模块详情
2021/11/02 Python