【问题标题】:How to get first visible DOM element currently showing on the screen?如何获取当前显示在屏幕上的第一个可见 DOM 元素?
【发布时间】:2013-03-14 16:44:10
【问题描述】:

如何获取当前显示在屏幕上的第一个可见 DOM 元素?

我尝试了类似的东西

var el = document.elementFromPoint(x, y)

并在while循环中增加y坐标,但问题是当文档上有css多列时它不起作用,在这种情况下返回标签,而不是实际元素。有什么方法可以让我真正获得适用于 css 列的屏幕(顶部,左侧)元素?

【问题讨论】:

  • 你不能这样做,但检查 tagName 是否为 body/html/(不需要的元素)
  • @apelsinapa 我想这是唯一的方法。我只是不想让while循环混乱。 :)

标签: javascript jquery html multiple-columns


【解决方案1】:

这是一个非常基本的示例,它只获取距离top 最远的元素。这只是一个开始,因为您可能还需要考虑 left 偏移量。

您需要排除 bodyhtml 元素(如下所示),因为它们始终是第一个。

Fiddle

var first;
$(':visible').not('body, html').each(function() {
    if (typeof first == 'undefined') {
        first = $(this);
    } else if ($(this).offset().top < first.offset().top) {
        first = $(this);
    }
});
first.addClass('highlight');

【讨论】:

  • +1,需要注意的是,如果您也关心左侧,则需要添加它,就像在此处检查顶部一样。
  • @Aaron Blenkush 我想我会尝试一下并将其修改为我需要的。谢谢
  • @CodeWeed,我也刚刚意识到:这不会考虑窗口的滚动位置。如果这是一个因素,您需要考虑到这一点(从偏移量中减去 window.scrollY)。您可能还需要考虑每个元素的高度——您可以滚动以使元素离开窗口边缘,但底部可能仍然可见。在这种情况下,您将添加元素的高度,以获取元素底部边缘相对于窗口的“位置”。然后你会得到不小于零的最小值。
  • @CodeWeed:实际上,如果您需要考虑滚动,您很可能需要实现一个“重叠”公式,以查看元素是否与窗口完全重叠 AND 是 @ 987654328@ AND 最靠近左上角。不知道你想多复杂!
  • @AaronBlenkush 谢谢你的意见。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 2020-11-03
  • 2012-09-24
  • 2013-10-30
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2017-10-12
相关资源
最近更新 更多