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 错误处理与调试经验总结
Aug 10 Javascript
JavaScript转换农历类实现及调用方法
Jan 27 Javascript
javascript继承机制实例详解
Nov 20 Javascript
详解vue渲染函数render的使用
Dec 12 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
Aug 28 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php正则校验用户名介绍
2008/07/19 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
三种php连接access数据库方法
2013/11/11 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
各种快递查询--Api接口
2016/04/26 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
工程造价专业大学生职业规划范文
2014/03/09 职场文书
健康家庭事迹材料
2014/05/02 职场文书
工作证明格式及范本
2014/09/12 职场文书
周年庆典答谢词
2015/01/20 职场文书
2015年派出所工作总结
2015/04/24 职场文书
董事长新年致辞
2015/07/29 职场文书
靠谱准确的求职信
2019/04/02 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
JS setTimeout与setInterval的区别
2022/04/20 Javascript
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers