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 相关文章推荐
prototype Element学习笔记(篇二)
Oct 26 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
javascript使用正则获取url上的某个参数
Sep 04 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
Feb 11 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
JS实现瀑布流效果
Mar 07 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网页后退不再出现过期
2007/03/08 PHP
php实现aes加密类分享
2014/02/16 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
node.js使用redis储存session的方法
2018/09/26 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
python找出完数的方法
2018/11/12 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
高级Java程序员面试要点
2013/08/02 面试题
上班离岗检讨书
2014/01/27 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
六年级语文教学反思
2016/03/03 职场文书
浅析Python中的套接字编程
2021/06/22 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript