在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vue如何監(jiān)聽window.onload事件

vue如何監(jiān)聽window.onload事件

vue項目中要用到一個js視差滾動插件skrollr.js,看了插件的官方說明要在document加載完后再調(diào)用插件的init方法初始化插件:

clipboard.png

現(xiàn)在問題來了,在vue中怎么監(jiān)聽window.onload事件,網(wǎng)上搜了很多都說vue中基本是不會用到window.onload事件的,那插件的初始化寫在哪呢?
下面是我寫的代碼:

clipboard.png

這樣寫的話只有在第一次刷新進入頁面的時候插件可以初始化成功,如果是從該頁面進入別的頁面以后再回來的話window的load事件就不會再執(zhí)行了,插件無法初始化也就用不了。
試過不用load事件,直接將init()寫在mounted生命周期函數(shù)中,也不行,直接寫在script標簽內(nèi)也不行。

哪位大神遇到過的可以解答以下,萬分感謝~

回答
編輯回答
筱饞貓
  1. 糾正一下是進入別的頁面還是進入別的路由。
  2. 補充一下是每個路由頁面有獨立的視差效果還是只需要在根組件初始化一次。
  3. 也不行的意識是init沒執(zhí)行?

使用單文件組件開發(fā)的vue程序,在vue代碼開始運行之前就已經(jīng)onload了(畢竟只有一個#app元素和幾個js文件)。所以沒必要監(jiān)聽onload。
同時可嘗試在目標組件的mounted中使用this.$nexttick進行初始化,直接執(zhí)行,不要加onload事件,同時由于vue的機制,重新進入路由頁面時(非keep-alive)是重新創(chuàng)建的全新的dom元素,我覺得在銷毀的時候需要手動解除視差效果,在進入后重新初始化。


mounted () {
  // this.$nextTick(() => {
    skrollr.init()
  // })
},
beforeDestroy () {
  let instance = skrollr.get()
  instance.destroy()
}

這類不依賴vue進行dom操作的第三方庫,一般都需要你手動銷毀。

2017年3月2日 07:01
編輯回答
孤毒

vue的生命周期函數(shù)是監(jiān)聽vue組件運行時的各種狀態(tài), onload監(jiān)聽的是頁面的事件,兩者并無太大關(guān)系,如果只是需要在onload的時候init,那就完全不用寫在vue組件里,寫在script標簽里就可以了。

2017年9月21日 16:51
編輯回答
兔囡囡

你的vue組件使用緩存了吧,緩存后不執(zhí)行mounted,你可以放在activated里面

2018年9月12日 03:59
編輯回答
笨笨噠

請問這個問題解決了嗎

2018年6月2日 05:11