Javascript 查找可滚动div中的顶部和最后一个元素

Javascript 查找可滚动div中的顶部和最后一个元素,javascript,html,position,Javascript,Html,Position,我有一个固定高度的可滚动div。滚动时,我需要获取可见视口顶部的元素和视口底部的元素。我可以使用scrollTop获取滚动条的位置,但是我不确定如何获取元素 更新:为清晰起见,将问题格式化 应该使用DOM元素在div中循环。看看这里,我认为这可能是一个有用的资源: 使用一些数组和计数器,您应该能够获得div中的最后一个元素。您应该使用DOM元素在div中循环。看看这里,我认为这可能是一个有用的资源: 使用一些数组和计数器,您应该能够获取div中的最后一个元素。获取div的滚动位置 var scr

我有一个固定高度的可滚动div。滚动时,我需要获取可见视口顶部的元素和视口底部的元素。我可以使用scrollTop获取滚动条的位置,但是我不确定如何获取元素


更新:为清晰起见,将问题格式化

应该使用DOM元素在div中循环。看看这里,我认为这可能是一个有用的资源:


使用一些数组和计数器,您应该能够获得div中的最后一个元素。

您应该使用DOM元素在div中循环。看看这里,我认为这可能是一个有用的资源:


使用一些数组和计数器,您应该能够获取div中的最后一个元素。

获取div的滚动位置

var scrollY = document.getElementById("yourDiv").scrollTop;
在内部元素中循环并查看它们的位置

var divs = document.getElementById("yourDiv").getElementsByTagName("div");
alert(divs[0].offsetTop)

找出其中一个在scrollTop位置,另一个在scrollTop+高度位置

获取div的滚动位置

var scrollY = document.getElementById("yourDiv").scrollTop;
在内部元素中循环并查看它们的位置

var divs = document.getElementById("yourDiv").getElementsByTagName("div");
alert(divs[0].offsetTop)

找出其中一个在scrollTop位置,另一个在scrollTop+高度位置

我假设您的DIV是一个很长的文本行列表,并且所有行的高度都是一致的。如果这是真的,那么您不需要询问哪个位于视口顶部,因为您将能够计算它

无论如何,您都希望完整地显示这篇文章的第一页,因此您创建了一个完整的、可显示的行,询问它的高度,并记住这一点。然后添加更多包含行的文本,直到行的总高度大于窗口的高度。然后,添加大约1990个空行,以便拇指的大小和位置准确反映列表的大小

然后,当有人滚动你的窗口时,你可以计算哪些行应该是可见的;击溃那些已经离开视野的人,建立那些应该可见的人。完成了


(我想-我从来没有试过!)

我假设您的DIV是一个很长的文本行列表,并且所有行的高度都是相同的。如果这是真的,那么您不需要询问哪个位于视口顶部,因为您将能够计算它

无论如何,您都希望完整地显示这篇文章的第一页,因此您创建了一个完整的、可显示的行,询问它的高度,并记住这一点。然后添加更多包含行的文本,直到行的总高度大于窗口的高度。然后,添加大约1990个空行,以便拇指的大小和位置准确反映列表的大小

然后,当有人滚动你的窗口时,你可以计算哪些行应该是可见的;击溃那些已经离开视野的人,建立那些应该可见的人。完成了


(我想-我从未尝试过!)

或者您可以尝试使用
firstElementChild
lastElementChild

first = document.querySelector('#your_div_id_or_selector').firstElementChild; 
first.scrollIntoView()
最后一个元素是什么

last = document.querySelector('#your_div_id_or_selector').lastElementChild;
last.scrollIntoView()

或者您可以尝试使用
firstElementChild
lastElementChild

first = document.querySelector('#your_div_id_or_selector').firstElementChild; 
first.scrollIntoView()
最后一个元素是什么

last = document.querySelector('#your_div_id_or_selector').lastElementChild;
last.scrollIntoView()


我知道如何循环,但是我如何知道哪个元素现在位于div的顶部-滚动条当前所在的位置?啊,你的措辞有点难以理解。div顶部的东西总是在那里:)你想要的是可见窗口/视口/视图顶部的元素,类似的东西。这正是我的意思:)太好了!我可以建议您编辑您的问题以反映这一点吗?如果人们能够更好地理解你,答案的质量应该会提高。另外,请附上一个小备注,说明为清晰起见,措辞已更改。完成。谢谢我会尝试你的建议。我知道如何循环,但是我如何知道哪个元素现在在div的顶部-滚动条当前所在的位置?啊,你的措辞有点难以理解。div顶部的东西总是在那里:)你想要的是可见窗口/视口/视图顶部的元素,类似的东西。这正是我的意思:)太好了!我可以建议您编辑您的问题以反映这一点吗?如果人们能够更好地理解你,答案的质量应该会提高。另外,请附上一个小备注,说明为清晰起见,措辞已更改。完成。谢谢我会试试你的建议。谢谢。我试试看。有没有一种方法可以在不循环的情况下获得div?也许如果我的div有一个增量Id或者什么的话?我之所以要避免循环,是因为我的页面上有大约2000个元素,我不想在滚动时循环所有元素。谢谢如果他们有一个固定的高度,这是一个简单的划分问题。是的,他们都有一个固定的高度。让我试试这个。谢谢。我试试看。有没有一种方法可以在不循环的情况下获得div?也许如果我的div有一个增量Id或者什么的话?我之所以要避免循环,是因为我的页面上有大约2000个元素,我不想在滚动时循环所有元素。谢谢如果他们有一个固定的高度,这是一个简单的划分问题。是的,他们都有一个固定的高度。让我试试这个。你要确保“空”行和填充行一样高。既然你在JS中做了这么多的修改,我想它应该像设置一个适用于所有这些行的CSS属性一样简单。是的,我已经用过CSS了。我几乎可以正常工作了,但是我注意到当我开始新项目时,浏览器会变得越来越慢。某个地方一定有内存泄漏。您需要确保“空”行与填充行的高度完全相同。既然你在JS中做了这么多的修改,我想它应该像设置一个适用于所有这些行的CSS属性一样简单。是的,我已经用过CSS了。我几乎可以用了,但是我注意到当我开始新的项目时,眉毛