【问题标题】:Is there a unified way to know if a node is visible or not?是否有统一的方法来知道节点是否可见?
【发布时间】:2010-06-17 21:32:15
【问题描述】:

我希望能够知道某个节点是否可见并在屏幕上呈现。据我所知,至少有 3 种标准且简单的方法可以使 HTML 节点不可见:

  • 设置opacity: 0;
  • 设置display: none;
  • 设置visibility: hidden

我可以只检查这三个,但我担心人们在隐藏内容的方式方面会变得有创意:

  • 使用负边距将元素发送到屏幕外;
  • 使用宽度或高度为0并隐藏溢出;
  • 我相信人们已经开发了更多。

所以我想知道是否有确定节点是否呈现到屏幕的标准方法。我很确定所有主要浏览器都为自己确定加速绘图,所以它可能以某种方式暴露。

【问题讨论】:

  • 只是为了增加您的问题:元素的父元素之一可以设置任何这些东西,这也会使元素不可见。 :D
  • 如何检查浏览器窗口的大小,然后找到元素的位置,然后检查你提到的所有选项,加上z-index?
  • @jnkrois:我无法检查我相信其他人已经开发了多少,因为我不认识他们。

标签: javascript html css


【解决方案1】:

您可以尝试使用 jQuery 的 :visible 修饰符。

http://api.jquery.com/visible-selector/

不幸的是,我很确定这没有考虑到您所说的任何“棘手”案例。

【讨论】:

  • 正如 jQuery 文档所说:具有可见性的元素:隐藏或不透明度:0 被认为是可见的所以 :visible 将不起作用
  • jquery 插件+1,尽管这不是他们想要的。
【解决方案2】:

如果这是您的页面,那么您可以拥有大部分的控制权,这成为应用您实施的标准的问题。如果这是一个 forign 页面(例如,如果您正在编写书签),那么变量的数量非常大。

可见性对人和浏览器来说意味着不同的东西。浏览器需要知道页面的上下文和布局,以及对象是否占用空间,即使在opacity:0visibility:hidden 的情况下也是如此,这就是jQuery 以这种方式工作的原因。

所以你需要查看特定元素,包括它的边距、填充、溢出属性、可见性、显示、所有不透明度设置,我猜也要检查color:rgba(*,*,*,0)。然后你需要一直查看每个父对象回到文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多