遇到的問題
最近在開發(fā)一個Vue的項目,好幾個頁面都有用到一個 頁面樓層滑動的組件缎岗,我就直接封裝成了一個静尼,但是遇到一個bug,就是我需要得到這個組件的offsetTop传泊,然后頁面滾動到這個位置的時候鼠渺,就設置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裂明,兩個組件中事件響應的辦法,不懂或者感興趣的可以點這里EventBus太援。
需要得到offsetTop的組件里面
Bus.$on('loadImgSuccess', () => {
var offsetTop = this.$refs.dom.offsetTop
})
這時候就可以確認每次不管是頁面新打開還是當前頁刷新都可以得到正確的offsetTop闽晦。