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 相关文章推荐
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 Javascript
js 函数的副作用分析
Aug 23 Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
Oct 24 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
使vue实现jQuery调用的两种方法
May 12 jQuery
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 Javascript
JS数组转字符串实现方法解析
Sep 04 Javascript
elementui实现预览图片组件二次封装
Dec 29 Javascript
vue实力踩坑之push当前页无效
Apr 10 Vue.js
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实现把数组按指定的个数分隔
2014/02/17 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
JS脚本defer的作用示例介绍
2014/01/02 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python中zfill()方法的使用教程
2015/05/20 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
Python实现登录接口的示例代码
2017/07/21 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
python3安装speech语音模块的方法
2018/12/24 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python sorted对list和dict排序
2020/06/09 Python
python利用opencv保存、播放视频
2020/11/02 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
师范应届生语文教师求职信
2013/10/29 职场文书
师德学习感言
2014/01/31 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
运动员加油词
2015/07/18 职场文书
python 详解turtle画爱心代码
2022/02/15 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis