Vue-Router实现页面正在加载特效方法示例

发布时间 - 2026-01-10 22:59:45    点击率:

前言

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 开发者的要求。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# vue  # router  # 加载  # 加载动画  # html  # vue2.0 循环遍历加载不同图片的方法  # 正在加载  # 都是  # 是个  # 如果你  # 好了  # 有个  # 你可以  # 你就  # 则是  # 你在  # 感兴趣  # 我们可以  # 就行  # 并将  # 跳转  # 这篇文章  # 你用  # 来实现  # 进到  # 就可以 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  网站页面设计需要考虑到这些问题  ,交易猫的商品怎么发布到网站上去?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在阿里云ECS服务器部署织梦CMS网站?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel如何处理异常和错误?(Handler示例)  如何在服务器上三步完成建站并提升流量?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  原生JS获取元素集合的子元素宽度实例  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Angular 表单中正确绑定输入值以确保提交与验证正常工作  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  使用spring连接及操作mongodb3.0实例  iOS中将个别页面强制横屏其他页面竖屏  如何快速搭建虚拟主机网站?新手必看指南  如何在企业微信快速生成手机电脑官网?  jQuery validate插件功能与用法详解  简历没回改:利用AI润色让你的文字更专业  Python函数文档自动校验_规范解析【教程】  js实现点击每个li节点,都弹出其文本值及修改  韩国服务器如何优化跨境访问实现高效连接?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何批量查询域名的建站时间记录?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  魔毅自助建站系统:模板定制与SEO优化一键生成指南  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  javascript中对象的定义、使用以及对象和原型链操作小结  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  香港服务器选型指南:免备案配置与高效建站方案解析  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何快速生成ASP一键建站模板并优化安全性?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  php 三元运算符实例详细介绍  高端建站三要素:定制模板、企业官网与响应式设计优化  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  BootStrap整体框架之基础布局组件  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法