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 中介者模式实例
Dec 16 Javascript
javascript模拟订火车票和退票示例
Apr 24 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
原生js仿jquery实现对Ajax的封装
Oct 04 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
Angular2自定义分页组件
Apr 19 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
Vue.js实现实例搜索应用功能详细代码
Aug 24 Javascript
JavaScript的Object.defineProperty详解
Jul 09 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 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 防止表单重复提交两种实现方法
2016/11/03 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
JS实现留言板功能
2017/06/17 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
学前端,css与javascript重难点浅析
2020/06/11 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python操作串口的方法
2015/06/17 Python
python科学计算之narray对象用法
2019/11/25 Python
Python 列表反转显示的四种方法
2020/11/16 Python
python Timer 类使用介绍
2020/12/28 Python
python 实现有道翻译功能
2021/02/26 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
渗透攻击的测试步骤
2014/06/07 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
法学个人求职信范文
2014/01/27 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
医院营销工作计划
2015/01/16 职场文书
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript