javascript - 在 Vuejs 中观察 window.scrollY 的变化

标签 javascript vue.js vuejs2

我有一个非常简单的应用程序,它有 2 个组件:App.vue 和另一个组件,Home.vue,我在其中保存其余的结构应用程序:一个粘性标题和一些带有 anchor 的部分可以滚动到。

我想将一个类应用到粘性 header ,以在页面滚动时最小化 Logo 。所以我想我会注意 window.scrollY 中的任何变化。因此,如果 scrollY 大于 0,则应用一些最小化 Logo 的类。

我尝试在我的组件中监听滚动事件,但收效甚微。在此讨论中,提供了一个很好的解决方案,但我不知道在哪里放置滚动事件。 https://github.com/vuejs/Discussion/issues/324

因此,我认为最合适的解决方案是创建一个数据属性,将 window.scrollY 图形分配给它,然后观察其值的变化。不幸的是,观察者永远不会被触发。所以现在我被困住了。代码是:

data () {
return {
  ...
  windowTop: window.top.scrollY
 }
}
...
watch: {
 windowTop: {
  immediate: true,
  handler (newVal, oldVal) {
    console.log(newVal, oldVal);
  },
 }
}

关于我可能做错了什么的任何想法?

最佳答案

window 属性不能像那样被动使用。相反,您必须监听 windowscroll 事件并做出相应的响应:

mounted() {
  window.addEventListener("scroll", this.onScroll)
},
beforeDestroy() {
  window.removeEventListener("scroll", this.onScroll)
},
methods: {
  onScroll(e) {
    this.windowTop = window.top.scrollY /* or: e.target.documentElement.scrollTop */
  }
}

Edit Watching scrollTop in Vue

关于javascript - 在 Vuejs 中观察 window.scrollY 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55391472/

相关文章:

javascript - Backbone.js 将从服务器检索到的模型添加到集合中

javascript - 在使用 jest 的 vue 测试中找不到模块 '@jest/globals'

vue.js - 在另一个组件中从一个 Vue 单个组件获取数据?

vue.js - 如何在 Vue 中使用 VeeValidate 时修复 "TypeError: plugin is undefined"错误

javascript - HTML5 成员函数内的作用域

javascript - 当代码在 SignalR 回调中时 AngularJS 绑定(bind)延迟

javascript - 无法使用 Vue 打包库加载 CSS 文件(npm)

javascript - 使用 Vue js 全局定义一个常量

javascript - 根据复选框检查从另一个数组中删除数组

javascript - v-file-input .click() 不是函数