我已经搜索了一个解决方案并提出了这个代码
methods: {
handleScroll () {
console.log(window.scrollY)
}
},
created () {
window.addEventListener('scroll', this.handleScroll);
},
destroyed () {
window.removeEventListener('scroll', this.handleScroll);
}
不幸的是,这对我不起作用。我也尝试将窗口更改为document.body。
错误讯息为Window is not defined
答案 0 :(得分:8)
window
未定义,因为nuxt JS是服务器端呈现的。
请尝试使用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);
}
}
有关详细信息,请参阅link
答案 1 :(得分:8)
在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
中的ifs。