gpt4 book ai didi

javascript - 确定元素是否在另一个元素后面

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:26 24 4
gpt4 key购买 nike

有没有办法确定 elementA 是否在另一个元素“后面”,因此 elementA 对用户不可见?

显然可以使用 stacking context ,但问题是我们不知道应该查看哪些元素。因此我们必须遍历 DOM 中的所有元素并对多个元素执行堆栈上下文比较。这在性能方面并不好。

这是一个 jsfiddle。那么有没有一种方法可以确定#hidden-element 对用户不可见,因为另一个元素呈现在它上面?

https://jsfiddle.net/b9dek40b/5/

HTML:

<div id="covering-element"></div>
<div>
<div id="hidden-element"></div>
</div>

样式:

#covering-element {
position: absolute;
width: 100px;
height: 100px;
background: darksalmon;
text-align: center;
}

#hidden-element {
width: 25px;
height: 25px;
background: deeppink;
}

最佳答案

我们的解决方案是使用一些东西来确定该元素是否可见并且不在任何其他元素后面。这是我们使用的方法。

  1. window.getComputedStyle检查 visibility:hiddendisplay:none
  2. document.elementFromPoint从多个点。最常见的情况可能可以通过检查所有 Angular 落来处理。尽管我们需要更多的点数才能获得更可靠的结果。可以使用 Element.getBoundingClientRect() 轻松检查 Angular 坐标

https://jsfiddle.net/k591Lbwu/27/

HTML

<div id="covering-element"></div>
<div>
<div id="hidden-element"></div>
</div>

<button style="margin-top:100px">Check visibility</button>

CSS

#covering-element {
position: absolute;
width: 100px;
height: 100px;
background: darksalmon;
text-align: center;
}

#hidden-element {
width: 25px;
height: 25px;
background: deeppink;
}

JavaScript

document.querySelector('button').addEventListener('click', function() {
const element = document.getElementById('hidden-element')
alert('Visible = '+isVisible(element))
})

function isVisible(element) {
if(!isVisibleByStyles(element)) return false
if(isBehindOtherElement(element)) return false
return true
}

function isVisibleByStyles(element) {
const styles = window.getComputedStyle(element)
return styles.visibility !== 'hidden' && styles.display !== 'none'
}

function isBehindOtherElement(element) {
const boundingRect = element.getBoundingClientRect()
// adjust coordinates to get more accurate results
const left = boundingRect.left + 1
const right = boundingRect.right - 1
const top = boundingRect.top + 1
const bottom = boundingRect.bottom - 1

if(document.elementFromPoint(left, top) !== element) return true
if(document.elementFromPoint(right, top) !== element) return true
if(document.elementFromPoint(left, bottom) !== element) return true
if(document.elementFromPoint(right, bottom) !== element) return true

return false
}

关于javascript - 确定元素是否在另一个元素后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49751396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com