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脚本
Dec 12 Javascript
按给定几率进行随机抽取的js代码
Dec 28 Javascript
JS date对象的减法处理实现代码
Dec 28 Javascript
js操作css属性实现div层展开关闭效果的方法
May 11 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
Dec 17 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
JS实现省市县三级下拉联动
Apr 10 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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
python使用Matplotlib画条形图
2020/03/25 Python
如何使用python操作vmware
2019/07/27 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
Python中if有多个条件处理方法
2020/02/26 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
Weblogc domain问题
2014/01/27 面试题
英语课前三分钟演讲稿
2014/08/19 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
个人更名证明
2015/06/23 职场文书
深度学习详解之初试机器学习
2021/04/14 Python