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 相关文章推荐
JSON 编辑器实现代码
Dec 06 Javascript
图片onload事件触发问题解决方法
Jul 31 Javascript
JavaScript AOP编程实例
Jun 16 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
JS随机打乱数组的方法小结
Jun 22 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
node.js 抓取代理ip实例代码
Apr 30 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
vue实现a标签点击高亮方法
Mar 17 Javascript
详解Vue的列表渲染
Nov 20 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 分页原理详解
2009/08/21 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
js 学习笔记(三)
2009/12/29 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
详解jQuery中的事件
2016/12/14 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
python直接访问私有属性的简单方法
2016/07/25 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
煤矿安全协议书
2014/08/20 职场文书
1000字打架检讨书
2014/11/03 职场文书
放牛班的春天观后感
2015/06/01 职场文书