私は解決策を探して、このコードを思いついた
methods: {
handleScroll () {
console.log(window.scrollY)
}
},
created () {
window.addEventListener('scroll', this.handleScroll);
},
destroyed () {
window.removeEventListener('scroll', this.handleScroll);
}
残念ながら、これは私にはうまくいきません。また、ウィンドウをdocument.bodyに変更しようとしました。
エラーメッセージはWindow is not defined
nuxt JSはサーバー側でレンダリングされるため、window
は未定義です。
したがって、process.browser
変数を使用して試してください
methods: {
handleScroll () {
console.log(window.scrollY)
}
},
created () {
if (process.browser) {
window.addEventListener('scroll', this.handleScroll);
}
},
destroyed () {
if (process.browser) {
window.removeEventListener('scroll', this.handleScroll);
}
}
詳細については、 リンク を参照してください
window
またはcreated
でbeforeCreate
またはその他のブラウザ固有のAPIを使用すると、document
やwindow
などのプラットフォーム固有のAPIがサーバー(SSRが発生する場所)で使用できないため、問題が発生します。代わりに、ロジックを作成済みからbeforeMount
に移動します。作成したままにしてprocess.browser
で確認することもできますが、それほどクリーンではなく、混乱を招きやすいです。
export default {
methods: {
handleScroll () {
// Your scroll handling here
console.log(window.scrollY)
}
},
beforeMount () {
window.addEventListener('scroll', this.handleScroll);
},
beforeDestroy() {
window.removeEventListener('scroll', this.handleScroll);
}
}
サーバーとクライアントの両方でcreated
とbeforeCreate
のみが実行されます。したがって、beforeMount
またはbeforeDestroy
のifを保護する必要はありません。
さらに読む ssr-ready Vue components