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重建星际争霸
Dec 22 Javascript
javaScript Array(数组)相关方法简述
Jul 25 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
浅谈JsonObject中的key-value数据解析排序问题
Dec 06 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 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
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
详解Python中is和==的区别
2019/03/21 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
如何理解Python中的变量
2020/06/01 Python
python excel和yaml文件的读取封装
2021/01/12 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
机械电子工程毕业生自荐信
2013/11/23 职场文书
主题婚礼策划方案
2014/02/10 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
学期个人自我总结
2015/02/13 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang