Vue-Router实现页面正在加载特效方法示例


Posted in Javascript onFebruary 12, 2017

前言

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。

如果你在使用 Vue.js 和 Vue-Router 开发单页面应用。因为每个页面都是一个 Vue 组件,你需要从服务器端请求数据,然后再让 Vue 引擎来渲染到页面上。

例如,这里有个用户个人资料的页面。

user.vue 文件如下:

<template>
 <div>
  <h2 v-text="user.name"></h2>
  <p v-text="user.description"></p>
 </div>
</template>
<script>
 export default{
  data(){
   return{
    user: {}
   }
  }
 }
</script>

在动画过渡期间向服务器请求数据,如下:

<script>
export default{
 data(){
  return{
   user: {}
  }
 },
 route: {
  data: function (transition) {
   this.getUserDetails(transition);
  }
 },
 methods: {
  getUserDetails(transition)
  {
   this.$http.get('/users/' + this.$route.params.userName)
    .then(function (response) {
     this.user = response.data;
     transition.next();
    });
  }
 }
}
</script>

这样,我们可以通过访问变量 $loadingRouteData。就可以实现隐藏所有的页面元素,显示某个正在加载的元素,比如某个 logo 等。

<div v-if="$loadingRouteData">
 <div class="white-widget grey-bg author-area">
 <div class="auth-info row">
 <div class="timeline-wrapper">
 <div class="timeline-item">
  <div class="animated-background">
   <div class="background-masker header-top"></div>
   <div class="background-masker header-left"></div>
   <div class="background-masker header-right"></div>
   <div class="background-masker header-bottom"></div>
   <div class="background-masker subheader-left"></div>
   <div class="background-masker subheader-right"></div>
   <div class="background-masker subheader-bottom"></div>
  </div>
 </div>
 </div>
 </div>
 </div>
</div>
<div v-if="!$loadingRouteData">
 <div>
  <h2 v-text="user.name"></h2>
  <p v-text="user.description"></p>
 </div>
</div>

比如,正在加载的样式代码如下:

.timeline-item {
 background: #fff;
 border-bottom: 1px solid #f2f2f2;
 padding: 25px;
 margin: 0 auto;
}

@keyframes placeHolderShimmer{
 0%{
 background-position: -468px 0
 }
 100%{
 background-position: 468px 0
 }
}

.animated-background {
 animation-duration: 1s;
 animation-fill-mode: forwards;
 animation-iteration-count: infinite;
 animation-name: placeHolderShimmer;
 animation-timing-function: linear;
 background: #f6f7f8;
 background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);
 background-size: 800px 104px;
 height: 40px;
 position: relative;
}

.background-masker {
 background: #fff;
 position: absolute;
}

/* Every thing below this is just positioning */

.background-masker.header-top,
.background-masker.header-bottom,
.background-masker.subheader-bottom {
 top: 0;
 left: 40px;
 right: 0;
 height: 10px;
}

.background-masker.header-left,
.background-masker.subheader-left,
.background-masker.header-right,
.background-masker.subheader-right {
 top: 10px;
 left: 40px;
 height: 8px;
 width: 10px;
}

.background-masker.header-bottom {
 top: 18px;
 height: 6px;
}

.background-masker.subheader-left,
.background-masker.subheader-right {
 top: 24px;
 height: 6px;
}


.background-masker.header-right,
.background-masker.subheader-right {
 width: auto;
 left: 300px;
 right: 0;
}

.background-masker.subheader-right {
 left: 230px;
}

.background-masker.subheader-bottom {
 top: 30px;
 height: 10px;
}

.background-masker.content-top,
.background-masker.content-second-line,
.background-masker.content-third-line,
.background-masker.content-second-end,
.background-masker.content-third-end,
.background-masker.content-first-end {
 top: 40px;
 left: 0;
 right: 0;
 height: 6px;
}

.background-masker.content-top {
 height:20px;
}

.background-masker.content-first-end,
.background-masker.content-second-end,
.background-masker.content-third-end{
 width: auto;
 left: 380px;
 right: 0;
 top: 60px;
 height: 8px;
}

.background-masker.content-second-line {
 top: 68px;
}

.background-masker.content-second-end {
 left: 420px;
 top: 74px;
}

.background-masker.content-third-line {
 top: 82px;
}

.background-masker.content-third-end {
 left: 300px;
 top: 88px;
}

这样,你就有了 Vue-Router 的正在加载时候的效果了。你可以把以上代码写进到一个单独的组件内,在你用的地方引用它就行。

最后

这仅是个关于 Vue-Router 加载的组件的简单教程,实际上可以在许多地方来进行改进,

VueJobs.com

如果你是一位对 Vue.js 感兴趣的前端工程师,可去这个网上浏览下,了解下国外对 Vue 开发者的要求。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
js去除重复字符串两种实现方法
Jan 09 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
JavaScript面试开发常用的知识点总结
Aug 08 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
JSON与js对象序列化实例详解
Mar 16 Javascript
React中的refs的使用教程
Feb 13 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
微信小程序+云开发实现欢迎登录注册
May 24 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
Feb 11 #Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 #Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 #Javascript
JavaScript表单验证的两种实现方法
Feb 11 #Javascript
jQuery实现复制到粘贴板功能
Feb 11 #Javascript
js实现PC端和移动端刮卡效果
Mar 27 #Javascript
js实现短信发送倒计时功能(正则验证)
Feb 10 #Javascript
You might like
PHP生成便于打印的网页
2006/10/09 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
js实现日历
2020/11/07 Javascript
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python 经典数字滤波实例
2019/12/16 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Django 批量插入数据的实现方法
2020/01/12 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
国际贸易实务实训报告
2014/11/05 职场文书
好媳妇事迹材料
2014/12/24 职场文书
员工离职通知函
2015/04/25 职场文书
教学副校长工作总结
2015/08/13 职场文书
教育教学工作反思
2016/02/24 职场文书
从原生JavaScript到React深入理解
2022/07/23 Javascript