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 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
js有序数组的连接问题
Oct 01 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
javascript每日必学之循环
Feb 19 Javascript
AngularJS删除路由中的#符号的方法
Sep 20 Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
Vuex的实战使用详解
Oct 31 Javascript
JS继承最简单的理解方式
Mar 31 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP中list方法用法示例
2016/12/01 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
js点击选择文本的方法
2015/02/09 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
幼师求职自荐信范文
2014/01/26 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
平面设计师岗位职责
2014/09/18 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏