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 相关文章推荐
js获取下拉列表的值和元素个数示例
May 07 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
JavaScript中的数据类型转换方法小结
Oct 26 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
jQuery解决$符号命名冲突
Jun 18 Javascript
JavaScript DOM节点操作方法总结
Aug 23 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
Js的MessageBox
2006/12/03 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
python编程线性回归代码示例
2017/12/07 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
如何在pycharm中安装第三方包
2020/10/27 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
关于环保的建议书400字
2014/03/12 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python