解決Vue中mounted鉤子函數(shù)獲取節(jié)點高度出錯問題
遇到的問題
最近在開發(fā)一個Vue的項目,好幾個頁面都有用到一個 頁面樓層滑動的組件,我就直接封裝成了一個,但是遇到一個bug,就是我需要得到這個組件的offsetTop,然后頁面滾動到這個位置的時候,就設(shè)置position屬性為fixed,讓他固定在屏幕上。問題是當我在mounted鉤子函數(shù)中獲取offsetTop的時候,在新開的頁簽中打開頁面,會得到錯誤的offsetTop,但是在當前頁面刷新,就不會有問題。
定位問題
后來查到問題,就是加載的問題,新窗口打開圖片,默認是沒有帶緩存的,圖片是GET請求,是異步的,js運行的肯定比圖片GET要快,所以當執(zhí)行mounted鉤子函數(shù)的時候,圖片還沒有全部加載完,這時候就會得到一個錯誤的offsetTop。
解決方案
給圖片加上ref屬性,并在那個組件里的mounted鉤子函數(shù)中寫,
this.$refs.img.onload = ()=>{
Bus.$emit('loadImgSuccess')
}
這里的Bus是用的EventBus,兩個組件中事件響應(yīng)的辦法,不懂或者感興趣的可以點這里EventBus。
需要得到offsetTop的組件里面
Bus.$on('loadImgSuccess', () => {
var offsetTop = this.$refs.dom.offsetTop
})
這時候就可以確認每次不管是頁面新打開還是當前頁刷新都可以得到正確的offsetTop。
相關(guān)文章
Vuejs在v-for中,利用index來對第一項添加class的方法
下面小編就為大家分享一篇Vuejs在v-for中,利用index來對第一項添加class的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
深入理解vue.js中$watch的oldvalue與newValue
這篇文章主要給大家介紹了關(guān)于vue.js中$watch的oldvalue與newValue的相關(guān)資料,文中通過示例代碼介紹的非常詳細,并且介紹了關(guān)于watch的其他測試,對大家學(xué)習(xí)或者使用vue.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起看看吧。2017-08-08
Vue加載讀取本地txt/json等文件的實現(xiàn)方式
這篇文章主要介紹了Vue加載讀取本地txt/json等文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
vue3+ElementPlus封裝函數(shù)式彈窗組件詳解
這篇文章主要為大家詳細介紹了如何利用vue3和ElementPlus封裝函數(shù)式彈窗組件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-08-08

