最近在使用Vue框架的時候,遇到了一個關于圖片懶加載的問題。當初項目中使用了vue-lazyload插件,一開始運行起來都很流暢,但是后來發現當頁面進行刷新時,插件不能正常工作了,尤其在首次刷新時,頁面上的圖片不能實現懶加載。
經過觀察,發現首次刷新時,插件的deferring屬性被默認設置成了false。在Vue2的data中,我們可以通過定義一些Vue實例屬性來存儲數據,達到響應式更新數據的目的,因此就從這個方面著手,嘗試通過改變Vue實例屬性來解決懶加載刷新的問題。
Vue.component('lazyload', {
props: {
src: {
type: String
},
offset: {
type: Number,
default: 200
},
tagName: {
type: String,
default: 'div'
}
},
data() {
return {
deferring: true
}
},
mounted() {
const bgImg = this.$el.getAttribute('data-bg-image');
const img = new Image();
img.onload = () =>{
this.deferring = false;
this.$el.classList.add('lazyloaded');
};
img.src = bgImg;
}
});
這里簡單演示一下用Vue的data屬性來解決懶加載首次刷新問題的方法。我們可以利用Vue的鉤子函數,在mounted生命周期時,以異步的形式來加載圖片,并設置deferring屬性的狀態。在圖片加載完畢之后,再將deferring設置為false,觸發Vue的響應式更新,在頁面上實現懶加載功能。
以上是本人的一點小小心得,僅供大家參考學習。雖然方法不一定完美,但相信可以幫你更好的理解Vue實例屬性的應用場景,以及在Vue框架下如何解決一些常規問題。
上一篇html 列表居中代碼