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 相关文章推荐
jsp+javascript打造级连菜单的实例代码
Jun 14 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
jquery提示效果实例分析
Nov 25 Javascript
JavaScript通过字符串调用函数的实现方法
Mar 18 Javascript
利用css+原生js制作简单的钟表
Apr 07 Javascript
jquery实现网页定位导航
Aug 23 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 Javascript
Vue中keep-alive组件的深入理解
Aug 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
一段php加密解密的代码
2007/07/16 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
php集成开发环境详解
2019/09/24 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
解析js如何获取css样式
2016/12/11 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python文件及目录操作实例详解
2015/06/04 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
Python多项式回归的实现方法
2019/03/11 Python
Django更新models数据库结构步骤
2020/04/01 Python
静态成员和非静态成员的区别
2012/05/12 面试题
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
班委竞选稿范文
2015/11/21 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
图神经网络GNN算法
2022/05/11 Python