【问题标题】:Get scroll position of HTML element relative to visible portion of container获取 HTML 元素相对于容器可见部分的滚动位置
【发布时间】:2017-08-25 21:15:00
【问题描述】:

现在我有一个网页:

  1. 顶部的固定标题,大小不一,覆盖页面的主要内容。
  2. 具有深度嵌套滚动容器的页面。
  3. 在该容器中,还有其他几个深度嵌套的元素。

我想要做的是滚动该容器,使里面的元素之一与容器的 可见 部分的顶部对齐。 我相信我正在寻找的是嵌套元素的顶部相对于容器可见部分的顶部。

不幸的是,我不能使用.offsetTop,因为它只引用元素的直接父元素,并且由于页面的结构,这些元素嵌套得太深而无法使用。它总是一个固定的数字。与滚动容器相同;它的直接父级不是窗口。令人沮丧的是,标题的高度不是固定的,所以我不能很容易地将它硬编码到我的计算中。我也不能使用 jQuery。

我尝试对元素和容器使用getBoundingClientRect,但它们之间的距离始终是固定的,并且它没有提供我需要的关于元素相对于容器滚动距离的信息不幸的是,可见区域。

编辑:我们已经有了滚动解决方案,但我们希望通过某种提议的方法来改进它,我正在尝试确定其可行性。我想请大家尽量只用粗体回答问题,而不是提出替代方案。我真的很感谢提供的任何帮助,但我希望能根据一个非常具体的场景获得一些非常具体的信息。

【问题讨论】:

  • 你能提供一个可行的例子吗?
  • 给要向上滚动的元素添加 id?
  • @KoushikChatterjee 该元素具有唯一的类名。我可以轻松获取元素对象和容器元素对象。
  • @Dekel 试试这个:jsfiddle.net/xnht5y0e/5 JSFiddle 现在对我来说非常挑剔,并且无法识别那里的函数,因此页脚中的脚本。
  • @TheSoundDefense 您希望滚动父级还是子级(实际的蓝色框)?

标签: javascript html


【解决方案1】:

我之前也遇到过这种问题,你可以试试这个自动滚动到元素

var elem = <some select operation that returns the element>;
elem.id = <some temp id> //if no id is there
var a  = document.createElement('a');
a.href = "#" + elem.id;
a.click();

如果您愿意,可以在完成后从元素中删除 id。

【讨论】:

  • 这会将elem 带到页面顶部,它会被标题部分覆盖,还是会将elem 放在标题下方?
  • 好吧,希望能上到页面顶部.. 试试看吧。
  • 好吧,滚动元素没有任何问题。我的问题是让它滚动到那个非常具体的点。
猜你喜欢
  • 2012-08-18
  • 2012-07-23
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多