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 相关文章推荐
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 Javascript
jquery+php随机生成红包金额数量代码分享
Aug 27 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
Apr 18 Javascript
深入理解vuex2.0 之 modules
Nov 20 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
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中require和include路径问题详解
2014/12/25 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
javascript中简单的进制转换代码实例
2013/10/26 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python中嵌套函数的实操步骤
2019/02/27 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
python如何调用字典的key
2020/05/25 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
关于读书的演讲稿
2014/05/07 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
财务检查整改报告
2014/11/06 职场文书
2014年营销工作总结
2014/11/22 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
nginx中proxy_pass各种用法详解
2021/11/07 Servers
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
python通过新建环境安装tfx的问题
2022/05/20 Python