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中实现暂停的几篇文章
Mar 04 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
Nov 06 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
Javascript基础学习笔记(菜鸟必看篇)
Jul 22 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
three.js利用射线Raycaster进行碰撞检测
Mar 12 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脚本代码
2011/02/19 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
一端时间轮换的广告
2006/06/26 Javascript
分享别人写的一个小型js框架
2007/08/13 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
小程序实现上下移动切换位置
2019/09/23 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
python开启多个子进程并行运行的方法
2015/04/18 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
对python Tkinter Text的用法详解
2018/10/11 Python
python retrying模块的使用方法详解
2019/09/25 Python
惠普香港官方商店:HP香港
2019/04/30 全球购物
采购主管的岗位职责
2013/12/17 职场文书
优秀教师工作感言
2014/02/16 职场文书
主题班会演讲稿
2014/05/22 职场文书
英语专业求职信
2014/07/08 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
会议欢迎词范文
2015/01/27 职场文书
上诉状格式
2015/05/23 职场文书
升职自荐书
2019/05/09 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js