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 相关文章推荐
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
JavaScript格式化数字的函数代码
Nov 30 Javascript
javascript + jquery实现定时修改文章标题
Mar 19 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
Sep 24 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
canvas绘制七巧板
Feb 03 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 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
基于xcache的配置与使用详解
2013/06/18 PHP
PHP修改session_id示例代码
2014/01/08 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
python实现360的字符显示界面
2014/02/21 Python
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python实现五子棋游戏
2019/06/18 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
常用的10个Python实用小技巧
2020/08/10 Python
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
婚礼主持结束词
2014/03/13 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
修辞手法有哪些?
2019/08/29 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
Python实现拼音转换
2021/06/07 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript
Java使用HttpClient实现文件下载
2022/08/14 Java/Android