Javascript - 获取滚动上的元素偏移值无法正常工作

标签 javascript html css

我正在尝试获取滚动上的顶部偏移元素值并进行计算,以便在到达滚动上的元素时可以更改元素的类。这是函数:

handleScroll () {
    const header = document.querySelector('#header');
    const content = document.querySelector('#content');
    const rect = header.getBoundingClientRect();
    const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
    const headerTop = rect.top + scrollTop;
    console.log(headerTop);
    if (window.scrollY > headerTop) {
      header.classList.add('fixed');
      content.classList.add('content-margin');
    } else {
      header.classList.remove('fixed');
      content.classList.remove('content-margin');
    }
  }
},
beforeMount () {
  window.addEventListener('scroll', this.handleScroll);
},
beforeDestroy () {
  window.removeEventListener('scroll', this.handleScroll);
}

但是,在检查 console.log(headerTop); 时。在滚动时,我发现在滚动时我一直在为 headerTop 获取不同的值,只有当我停止滚动时我才能获得正确的值。我该如何解决这个问题,以便在滚动时获得正确的值?

最佳答案

getBoundingClientRect() 函数将返回一个相对于当前窗口位置的框。当元素为粘性时,它的最高值将始终为 0,或者其他固定值。

例如,这可以通过在粘性元素之前添加一个空的 div 来解决,并将其用作偏移量的引用点。

关于Javascript - 获取滚动上的元素偏移值无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47090841/

相关文章:

php - 如何在网站加载前对用户名和密码进行保护

javascript - 用 open.window 打开弹出窗口不起作用?

javascript - 如何为具有相同 css 类名的所有元素调用合金 ui 的单击功能

javascript - 如何在悬停时添加下拉菜单?

html - 如何格式化链接,使它们在所有 Angular 点中占视口(viewport)的 25%?

javascript - DOM直接在javascript中修改部分textnode的样式

javascript - Kefir.js - 如何从回调函数流式传输事件?

jquery - 3d 悬停/在图像上移动

html - Chrome 35 DirectWrite(默认打开)破坏了我的网站菜单

html - 强制浏览器忽略 HTML 代码中的空格?