Vue中mounted鉤子函數(shù)獲取節(jié)點(diǎn)高度出錯(cuò)

遇到的問題

最近在開發(fā)一個(gè)Vue的項(xiàng)目,好幾個(gè)頁(yè)面都有用到一個(gè) 頁(yè)面樓層滑動(dòng)的組件,我就直接封裝成了一個(gè),但是遇到一個(gè)bug,就是我需要得到這個(gè)組件的offsetTop,然后頁(yè)面滾動(dòng)到這個(gè)位置的時(shí)候,就設(shè)置position屬性為fixed,讓他固定在屏幕上。問題是當(dāng)我在mounted鉤子函數(shù)中獲取offsetTop的時(shí)候,在新開的頁(yè)簽中打開頁(yè)面,會(huì)得到錯(cuò)誤的offsetTop,但是在當(dāng)前頁(yè)面刷新,就不會(huì)有問題。


定位問題

后來查到問題,就是加載的問題,新窗口打開圖片,默認(rèn)是沒有帶緩存的,圖片是GET請(qǐng)求,是異步的,js運(yùn)行的肯定比圖片GET要快,所以當(dāng)執(zhí)行mounted鉤子函數(shù)的時(shí)候,圖片還沒有全部加載完,這時(shí)候就會(huì)得到一個(gè)錯(cuò)誤的offsetTop。

解決方案

給圖片加上ref屬性,并在那個(gè)組件里的mounted鉤子函數(shù)中寫,

this.$refs.img.onload = ()=>{
    Bus.$emit('loadImgSuccess')
}

這里的Bus是用的EventBus,兩個(gè)組件中事件響應(yīng)的辦法,不懂或者感興趣的可以點(diǎn)這里EventBus。
需要得到offsetTop的組件里面

Bus.$on('loadImgSuccess', () => {
    var offsetTop = this.$refs.dom.offsetTop  
})

這時(shí)候就可以確認(rèn)每次不管是頁(yè)面新打開還是當(dāng)前頁(yè)刷新都可以得到正確的offsetTop。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容