當我們在使用Vue進行頁面跳轉的時候,有時候會出現跳轉時頁面閃白的情況,這種情況在用戶體驗上很不友好,因此需要我們進行調試和解決。
出現閃白的原因主要是因為Vue的渲染速度和瀏覽器渲染速度不同步,導致在跳轉的瞬間頁面未加載完全就進行了渲染,造成了閃白的現象。
// 跳轉前增加 loading 效果
this.$store.commit('showLoading')
// 使用異步導航解決頁面閃白
this.$router.push({ path: '/home' })
this.$nextTick(() =>{
this.$store.commit('hideLoading')
})
解決方法主要有兩種,一種是使用Vue提供的異步導航功能,讓頁面在跳轉前等待某些操作完成再進行跳轉,從而達到抑制閃白的效果。具體實現方式是,在進行跳轉前先增加一個loading的效果,然后使用異步導航進行頁面跳轉,在跳轉完成后使用$nextTick方法來隱藏loading。以下代碼為示例代碼。
另一種解決方法是使用Vue提供的transition組件,可以通過動畫過渡的方式來抑制頁面的閃白現象。具體實現方式是,為需要進行跳轉的組件包裹一個transition組件,然后在該組件內部進行跳轉操作。以下代碼為示例代碼。
// home.vue 組件// 頁面內容 // router.js 配置
import Home from '@/components/Home.vue'
export default new Router({
routes: [
{
path: '/home',
name: 'home',
component: Home
}
]
})
// index.less 樣式配置
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
在以上示例代碼中,我們為組件添加了一個名為"fade"的過渡動畫,其中在樣式配置中配置了頁面從透明到不透明的過渡效果,在組件要進行跳轉時使用該組件包裹需要跳轉的頁面元素,以達到閃白效果的抑制。
有了這兩種解決方法,我們在進行Vue頁面跳轉的過程中就能夠更好的解決閃白現象,為用戶提供更加優良的使用體驗。