如何使用JavaScript检测元素重叠(覆盖)?
如何使用JavaScript检测重叠的HTML元素 我有一个物品清单(如何使用JavaScript检测元素重叠(覆盖)?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,如何使用JavaScript检测重叠的HTML元素 我有一个物品清单()。它使用JavaScript上下滑动。当它向下滑动时,根据项目的数量,它可能会与另一个元素重叠(),该元素此时处于绝对位置(可以更改) 当与该重叠时,我如何检测将新样式应用于以临时隐藏它或将其向下移动一点以防止重叠?当它们重叠时,看起来不太好。) 在这里你可以看到,我说的是: 非常感谢 功能对象j(a,b){ function isObjOnObj(a,b){ var al = a.left; var ar
)。它使用JavaScript上下滑动。当它向下滑动时,根据项目的数量,它可能会与另一个元素重叠(
),该元素此时处于绝对位置(可以更改)
当
与该
重叠时,我如何检测将新样式应用于
以临时隐藏它或将其向下移动一点以防止重叠?当它们重叠时,看起来不太好。) 在这里你可以看到,我说的是: 非常感谢
功能对象j(a,b){
function isObjOnObj(a,b){
var al = a.left;
var ar = a.left+a.width;
var bl = b.left;
var br = b.left+b.width;
var at = a.top;
var ab = a.top+a.height;
var bt = b.top;
var bb = b.top+b.height;
if(bl>ar || br<al){return false;}//overlap not possible
if(bt>ab || bb<at){return false;}//overlap not possible
if(bl>al && bl<ar){return true;}
if(br>al && br<ar){return true;}
if(bt>at && bt<ab){return true;}
if(bb>at && bb<ab){return true;}
return false;
}
var al=a.左;
var ar=a.左+a.宽;
var bl=左b;
var br=b.左+b.宽;
var at=a.top;
var ab=a.顶部+a.高度;
var bt=b.top;
var bb=b.顶部+b.高度;
如果(bl>ar | | | brab | | bbal&&blal&&brat&&btat&&bb为什么不将UL的z指数提高到底部的div之上
加:
这感觉像是碰撞检测,刚刚发布了一个解决方案。相反,我建议计算出一个菜单重叠需要多少列表项(即10),并在这些菜单(使用10li
)时隐藏div
)如果你有绝对的定位元素,那么它不是微不足道的——你需要计算每个元素的位置等等,并采取相应的行动。也许你应该考虑实现相同的效果,而不是绝对的,也许一些浮点数(浮点:左)和绝对(位置:绝对)在亲属中的组合(位置:相对)。.嗯…如果那是伪代码,当然。你需要检查所有偏移父项的位置,获取偏移宽度,偏移视线,等等。这是不可能的,在不同的站点页面上,列表项的数量和内容是不同的,因此在某些页面上,项目列表占据了很大的位置。列表项的内容或页面?如果列表项目高度一致,那么您仍然可以计算出10个项目将在top:100px
处重叠div
,因此有5个项目重叠top:50px
等。您需要编写一个函数来获取项目数量和div
的位置,并决定是否隐藏。或者我遗漏了什么?嘿。您可以将当前窗口宽度考虑到列表项换行时的公式中。(当然,还有文本大小和文本长度。)你目前的想法是什么?不幸的是,列表项的高度并不一致,因为它的内容会根据窗口的宽度移动到一个新行,所以在我的例子中,这种方法几乎是无用的。我认为,最好的方法是计算元素的位置并检查它们是否匹配,就像上面提供的Christompson一样。我曾使用JQuery尝试过这种方法以前,但位置计算有点错误,也许我刚刚犯了一个错误,但函数看起来是正确的。听起来不错,但我认为这个方法要复杂得多,然后只计算元素的位置。
#wrap {
z-index : 2;
position : relative;
}