vue 页面加载进度条组件实例


Posted in Javascript onFebruary 05, 2018

页面加载进度条最初我是在youtube上看到的,后面几乎在各大网站上都能见到它的身影,可以让用户在加载页面的时候不会对着完全空白的页面发呆,提升用户体验

但是从开发角度讲,这种进度条在真实性上确实很难把握,因为在逻辑代码加载完成之前,我们都不能统计到进度,而逻辑代码自身的进度也无法统计。另外,我们不可能监控到所有资源的加载情况。

事实上,用户并不是在乎你的页面究竟加载了百分之几,而真正关心的是离加载完还有多久,以及这个空白页面是没有加载完,还是加载完就是空白的。所以没我们需要去“模拟”一个进度条,在后端数据返回前利用一个假的动画效果模拟加载,在数据返回后读完进度条并且隐藏。

// progress-bar.vue
<template>
 <transition name="fade">
 <div class="progress-bar" v-if="isShow">
 </div>
 </transition>
</template>

<script type="text/babel">
 export default {
 data() {
  return {
  isShow: true, // 是否显示进度条
  val: 0, // 进度
  }
 },
 props: {
  /**
  * 每10毫秒自增幅度
  */
  step: {
  type: Number,
  default: 5,
  },
  /**
  * 初始值
  */
  initVal: {
  type: Number,
  default: 0,
  },
  /**
  * 到一定进度停止
  */
  stopVal: {
  type: Number,
  default: 80,
  },
  /**
  * 进度条继续到成功
  */
  isOk: {
  type: Boolean,
  default: false,
  },
 },
 mounted() {
  // 初始化后加载进度,加载到百分之多少由stopVal决定
  this.val = this.initVal
  let step = this.step
  let timer = setInterval(() => {
  this.val = this.val + step
  this.$el.style.width = this.val + '%'
  // 父组件数据加载完前进度条最多到stopVal的这个百分值
  if (this.val >= this.stopVal) {
   clearInterval(timer)
   return
  }
  }, 10)
 },
 watch: {
  /**
  * 监听组件props变化决定是否继续加载,一般在父组件数据加载完后改变此标志位
  */
  isOk() {
  let val = this.val
  let step = this.step
  let timer = setInterval(() => {
   val = val + step
   this.$el.style.width = val + '%'
   // 加载到百分百完成
   if (val >= 100) {
   // 关闭定时器
   clearInterval(timer)
   // 加载完成关闭进度条
   this.isShow = false
   // 加载完成的回调
   this.$emit('callback', 'load success')
   return
   }
  }, 10)
  },
 },
 }
</script>

<style lang="stylus" rel="stylesheet/stylus">
 .progress-bar {
 position fixed
 top 0
 height 6px
 width 0
 background-color #999
 }
 .fade {
 &-enter-active, &-leave-active {
  transition: all .3s
 }
 &-enter, &-leave-active {
  opacity: 0
 }
 }
</style>

以上这篇vue 页面加载进度条组件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
JavaScript中for-in遍历方式示例介绍
Feb 11 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
node.js入门实例helloworld详解
Dec 23 Javascript
使用Promise解决多层异步调用的简单学习心得
May 17 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
vue-cli webpack2项目打包优化分享
Feb 07 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 Javascript
js中数组对象去重的两种方法
Jan 18 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
JS设计模式之状态模式概念与用法分析
Feb 05 #Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 #Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 #Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 #Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 #Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 #Javascript
javascript实现最长公共子序列实例代码
Feb 05 #Javascript
You might like
PHP出错界面
2006/10/09 PHP
文章推荐系统(三)
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
vue获取当前激活路由的方法
2018/03/17 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python3.4中清屏的处理方法
2020/07/06 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
泰国在线书店:SE-ED
2020/06/21 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
晚归检讨书
2014/02/19 职场文书
高中军训感言400字
2014/02/24 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
周年庆典答谢词
2015/01/20 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
情况说明书怎么写
2015/10/08 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
MySQL触发器的使用
2021/05/24 MySQL
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android