91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決vue頁面加載閃爍的問題

發布時間:2021-07-13 10:23:41 來源:億速云 閱讀:939 作者:小新 欄目:web開發

這篇文章主要介紹了如何解決vue頁面加載閃爍的問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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頁面加載閃爍的問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

黄陵县| 安泽县| 汨罗市| 班戈县| 陇西县| 乌鲁木齐县| 威宁| 芮城县| 永善县| 三台县| 寻乌县| 古交市| 青铜峡市| 德江县| 北安市| 托里县| 建始县| 唐海县| 冷水江市| 临漳县| 都昌县| 延吉市| 龙胜| 平邑县| 岑溪市| 共和县| 和政县| 成安县| 香港| 河津市| 柏乡县| 公主岭市| 通州市| 天峻县| 陆河县| 岳阳县| 巢湖市| 繁峙县| 汉川市| 临漳县| 柘城县|