我知道有几种方法可以做到这一点。
测试 CSS 显示
if ($('#foo').css('display') == 'none')
测试可见性
if ($('#foo').is(':visible'))
在可见性中,我可以检查元素是否存在。
如果元素在文档中占用空间,则认为它们是可见的。可见元素的宽度或高度大于零。
具有visibility: hidden或opacity: 0的元素被视为可见,因为它们仍然在布局中占用空间。
但是,请注意,在这两种情况下,我都无法测试用户的可见性,因为:
通过将display属性设置为“none”或将visibility属性设置为“hidden”来隐藏元素。但是,请注意,这两种方法会产生不同的结果:
visibility: hidden隐藏元素,但它仍将占用与以前相同的空间。元素将被隐藏,但仍会影响布局。
display: none隐藏元素,它将不占用任何空间。元素将被隐藏,并且页面将显示为如果该元素不存在:
所以在这两个示例中,我都没有测试元素是否对用户来说是完全可见的。
所以我的问题是:
- 上面两个if代码的区别是什么?
- 测试元素是否对用户可见的最佳方法是什么:
我应该使用类似以下的方式:
if ($('#foo').is(':visible') &&
$('#foo').css('opacity') > 0 &&
$('#foo').css('visibility') != 'hidden')
$('#foo').is(':visible')
是检查元素是否对用户可见(即显示)的最佳方法。z-index
定位在另一个元素之上,但是它本身是完全可见的,那怎么办?如果这个最上层的 div 具有不透明的背景呢?或者是透明的?或者是部分透明的?那么被遮盖的元素是否被认为是可见的呢? - Jon