vue页面加载闪烁问题的解决方法


Posted in Javascript onMarch 28, 2018

v-if 和 v-show 的区别

v-if只会在满足条件时才会编译,而v-show不管是否满足条件始终会编译,v-show的显示与隐藏只是简单的切换CSS的display属性。

也就是说,在使用v-if时,若值为false,那么页面将不会有这个html标签生成。而v-show:不论其值是false还是true,html元素都会存在,只是简单的切换css的display属性。

使用场景

    一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。  

另外

    1.v-if 指令可以应用于template包装元素上,而v-show不支持template

    2.将v-show应用在组件上时,因为指令的优先级 v-else 会出现问题,解决办法就是用另一个 v-show 替换 v-else

// 错误
  <custom-component v-show="condition"></custom-component>
  <p v-else>这可能也是一个组件</p>
     // 正确做法
  <custom-component v-show="condition"></custom-component>
  <p v-show="!condition">这可能也是一个组件</p>

解决vue页面加载时出现{{message}}闪退

方法一:v-cloak

    v-cloak指令和css规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。
    v-cloak 指令可以像css选择器一样绑定一套css样式然后这套css会一直生效到实例编译结束。

eg:
    // <div> 不会显示,直到编译结束。
    [v-cloak]{
      display:none;
        }
    <div v-cloak>
       {{ message }}
    </div>

方法二:v-text

vue中我们会将数据包在两个大括号中,然后放到HTML里,但是在vue内部,所有的双括号会被编译成textNode的一个v-text指令。

而使用v-text的好处就是永远更好的性能,更重要的是可以避免FOUC (Flash of Uncompiled Content) ,也就是上面与遇到的问题。

eg:
  <span v-text="message"></span>
  <!-- same as -->
  <span>{{message}}</span>

补充:

vue 页面加载进度条组件

页面加载进度条最初我是在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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 Javascript
jquery插件开发之实现md5插件
Mar 17 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
Oct 14 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
Vue extend的基本用法(实例详解)
Dec 09 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 #jQuery
vue-cli axios请求方式及跨域处理问题
Mar 28 #Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 #Javascript
浅谈React高阶组件
Mar 28 #Javascript
vue数据控制视图源码解析
Mar 28 #Javascript
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 #jQuery
vue 开发一个按钮组件的示例代码
Mar 27 #Javascript
You might like
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
女大学生自我鉴定
2013/12/09 职场文书
面试后感谢信
2014/02/01 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
工程索赔意向书
2014/08/30 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS